web-dev-qa-db-fra.com

Comment utiliser la condition SQL LIKE avec plusieurs valeurs dans PostgreSQL?

Existe-t-il un moyen plus court de rechercher plusieurs correspondances:

 SELECT * 
 from table 
 WHERE column LIKE "AAA%" 
    OR column LIKE "BBB%" 
    OR column LIKE "CCC%"

Cette question s’applique à PostgreSQL 9.1, mais s’il existait une solution générique, ce serait encore mieux.

27
sorin

Peut-être qu'utiliser SIMILAR TO fonctionnerait?

SELECT * from table WHERE column SIMILAR TO '(AAA|BBB|CCC)%';
35
tozka

Utilisation de comparaisons de tableaux ou d’ensembles:

create table t (str text);
insert into t values ('AAA'), ('BBB'), ('DDD999YYY'), ('DDD099YYY');

select str from t
where str like any ('{"AAA%", "BBB%", "CCC%"}');

select str from t
where str like any (values('AAA%'), ('BBB%'), ('CCC%'));

Il est également possible de faire une AND qui ne serait pas facile avec une regex si elle correspond à n'importe quel ordre

select str from t
where str like all ('{"%999%", "DDD%"}');

select str from t
where str like all (values('%999%'), ('DDD%'));
19
Clodoaldo Neto

Utilisez LIKE ANY(ARRAY['AAA%', 'BBB%', 'CCC%']) selon cette astuce géniale @maniek a montré plus tôt dans la journée .

16
Craig Ringer

Vous pourrez peut-être utiliser IN si vous n'avez pas réellement besoin de caractères génériques. 

SELECT * de table WHERE colonne IN ('AAA', 'BBB', 'CCC')

0
ACT