web-dev-qa-db-ja.com

PostgreSQLで複数の値を持つSQL LIKE条件を使用するにはどうすればよいですか?

複数の一致を探す短い方法はありますか?

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

この質問はPostgreSQL 9.1に当てはまりますが、一般的な解決策があればさらに良いでしょう。

31
sorin

おそらくSIMILAR TO動作しますか?

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

配列またはセットの比較の使用:

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%'));

ANDを実行することもできますが、どの順序にも一致する場合、正規表現では簡単ではありません。

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

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

このクールなトリックに従ってLIKE ANY(ARRAY['AAA%', 'BBB%', 'CCC%'])を使用してください @ maniekは本日前に示しました

17
Craig Ringer

パターンマッチング で説明されているように、正規表現演算子()を()で区切って使用できます。

select column_a from table where column_a ~* 'aaa|bbb|ccc'
1
Diego