49

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

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

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

4

6 に答える 6

61

おそらく使用SIMILAR TOするとうまくいくでしょうか?

SELECT * from table WHERE column SIMILAR TO '(AAA|BBB|CCC)%';
于 2012-10-18T15:20:36.283 に答える
26

@maniek が今日示したLIKE ANY(ARRAY['AAA%', 'BBB%', 'CCC%'])このクールなトリックに従って使用します。

于 2012-10-18T22:10:53.233 に答える
26

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

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%'));
于 2012-10-19T12:14:40.247 に答える