sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL SELECT na poli nerozlišuje malá a velká písmena

Jednou nezmíněnou alternativou je nainstalovat citext rozšíření který je dodáván s PostgreSQL 8.4+ a používá pole citext :

regress=# CREATE EXTENSION citext;
regress=# SELECT 'foo' = ANY( '{"Foo","bar","bAz"}'::citext[] );
 ?column? 
----------
 t
(1 row)

Pokud v tomto chcete mít naprostou pravdu a vyhnout se rozšířením, musíte provést několik pěkně ošklivé dílčí dotazy protože Pg nemá mnoho operací s bohatým polem, zejména žádné operace funkčního mapování. Něco jako:

SELECT array_agg(lower(($1)[n])) FROM generate_subscripts($1,1) n;

... kde $1 je parametr pole. Ve vašem případě si myslím, že můžete trochu podvádět, protože se nestaráte o zachování pořadí pole, takže můžete udělat něco jako:

SELECT 'foo' IN (SELECT lower(x) FROM unnest('{"Foo","bar","bAz"}'::text[]) x);


  1. Nelze spustit Mysql na Macu

  2. Instalace a konfigurace MySQL na Ubuntu 20.04

  3. Jak zvládnout přestupné sekundy v Oracle

  4. Cizí klíč v první tabulce