250 votes

Vérifier si la valeur existe dans le tableau Postgres

En utilisant Postgres 9.0, j'ai besoin d'un moyen de tester si une valeur existe dans un tableau donné. Jusqu'à présent, j'ai trouvé quelque chose comme ça :

select '{1,2,3}'::int[] @> (ARRAY[]::int[] || value_variable::int)

Mais je n'arrête pas de penser qu'il devrait y avoir un moyen plus simple, je ne peux pas le voir. Cela semble mieux :

select '{1,2,3}'::int[] @> ARRAY[value_variable::int]

Je crois que ça suffira. Mais si vous avez d'autres façons de le faire, veuillez partager !

121voto

murison Points 296

Attention au piège dans lequel je suis entré : Lorsque vous vérifiez si une certaine valeur n'est pas présente dans un tableau, vous ne devriez pas le faire :

SELECT value_variable != ANY('{1,2,3}'::int[])

mais utilisez

SELECT value_variable != ALL('{1,2,3}'::int[])

à la place.

9voto

Dave Kraczo Points 430

Bonjour que celui-là fonctionne bien pour moi, peut-être utile pour quelqu'un

select * from your_table where array_column ::text ilike ANY (ARRAY['%text_to_search%'::text]);

7voto

pg2286 Points 428

unnest peuvent également être utilisés. Il étend le tableau à un ensemble de lignes, puis vérifier simplement qu'une valeur existe ou non est aussi simple que d'utiliser IN ou NOT IN.

par exemple

  1. id => uuid

  2. exception_list_ids => uuid[]

select * from table where id NOT IN (select unnest(exception_list_ids) from table2)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X