sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL hoofdletterongevoelig SELECT op array

Een alternatief dat niet wordt genoemd, is het installeren van de citext extensie die bij PostgreSQL 8.4+ wordt geleverd en een array van citext . gebruiken :

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

Als je hier strikt correct over wilt zijn en extensies wilt vermijden, moet je een aantal vrij lelijke subquery's omdat Pg niet veel rich array-bewerkingen heeft, met name geen functionele mapping-bewerkingen. Iets als:

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

... waarbij $1 de arrayparameter is. In jouw geval denk ik dat je een beetje vals kunt spelen omdat het je niet uitmaakt om de volgorde van de array te behouden, dus je kunt zoiets doen als:

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


  1. Hoe werkt het opschorten van transacties in het voorjaar?

  2. Maak een array in PHP vanuit mysql

  3. Laatste record selecteren uit INNER JOIN en groeperen

  4. Doorgaan met invoegingen in Oracle wanneer er een uitzondering wordt gemaakt