PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

SELECT PostgreSQL senza distinzione tra maiuscole e minuscole sull'array

Un'alternativa non menzionata è installare il citext estensione fornito con PostgreSQL 8.4+ e utilizza un array di citext :

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

Se vuoi essere rigorosamente corretto su questo ed evitare le estensioni devi fare alcune sottoquery piuttosto brutte perché Pg non ha molte operazioni di rich array, in particolare nessuna operazione di mappatura funzionale. Qualcosa come:

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

... dove $1 è il parametro dell'array. Nel tuo caso penso che tu possa barare un po' perché non ti interessa preservare l'ordine dell'array, quindi puoi fare qualcosa del tipo:

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