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 回答
9

您可以使用正则表达式运算符 ( ~ ),由 ( | ) 分隔,如模式匹配中所述

select column_a from table where column_a ~* 'aaa|bbb|ccc'
于 2019-06-19T21:38:40.150 回答
3

以下查询帮助了我。LIKE您可以使用 ,而不是使用~*

select id, name from hosts where name ~* 'julia|lena|jack';
于 2019-10-09T13:48:55.560 回答
-5

如果您实际上不需要通配符,则可以使用 IN。

SELECT * from table WHERE column IN ('AAA', 'BBB', 'CCC')

于 2018-08-06T18:31:08.653 回答