Comment utiliser SQL COMME condition avec plusieurs valeurs dans PostgreSQL?
Est-il une façon plus simple de chercher des correspondances multiples:
SELECT *
from table
WHERE column LIKE "AAA%"
OR column LIKE "BBB%"
OR column LIKE "CCC%"
Cette question s'applique à PostgreSQL 9.1, mais si il y a une solution générique, il serait encore mieux.
- Il se lit bien, fonctionne bien et est facile à comprendre. Pourquoi swap que pour des solutions de rechange comme le populaire réponse et d'obtenir dans des noeuds lorsque vous avez besoin de trouver des tuyaux (
|
) ou des crochets en données réelles? - Car n'est-il pas aussi facile à construire, de façon dynamique. Voir ma réponse sur la façon d'éviter de traiter avec une regex.
- C'est toujours un code qui n'est pas la norme ISO et plus difficile à comprendre par la comparaison. Sauf peut-être
any (values('AAA%'), ('BBB%'), ('CCC%')
cela semble bon.
Vous devez vous connecter pour publier un commentaire.
Peut-être en utilisant
SIMILAR TO
pourrait fonctionner ?SIMILAR TO
pourrait fonctionner, mais pour l'exemple dans la question, il convient deSIMILAR TO 'AAA%|(BBB|CCC)%'
ouSIMILAR TO '(AA%|BBB%|CCC%'
Similar to
a été ajouté à Postgres 7.3, afin de Netezza et de systèmes similaires peuvent pas permettre son utilisation.En utilisant un tableau ou un ensemble de comparaisons:
Il est également possible de faire un
AND
qui ne serait pas facile avec une regex si c'était pour correspondre à n'importe quel ordre:ANY
etALL
ont été ajoutés dans Postgresql 7.4.Utilisation
LIKE ANY(ARRAY['AAA%', 'BBB%', 'CCC%'])
que par ce truc génial @maniek a montré plus tôt aujourd'hui.ANY
a été ajouté dans Postgresql 7.4.Vous pouvez utiliser une expression régulière pour l'opérateur (~), séparés par (|) comme décrit dans Le Pattern Matching
Requête suivante m'a aidé. Au lieu d'utiliser
LIKE
, vous pouvez utiliser~*
.Vous pourriez être en mesure d'utiliser, si vous n'avez pas besoin de caractères génériques.
SELECT *
à partir de la table
OÙ la colonne DANS ('AAA', 'BBB', 'CCC')