有没有更短的方法来寻找多个匹配项:
SELECT *
from table
WHERE column LIKE "AAA%"
OR column LIKE "BBB%"
OR column LIKE "CCC%"
这个问题适用于PostgreSQL 9.1,但是如果有通用的解决方案,那就更好了。
答案 0 :(得分:37)
也许使用SIMILAR TO
会有用吗?
SELECT * from table WHERE column SIMILAR TO '(AAA|BBB|CCC)%';
答案 1 :(得分:19)
使用数组或集合比较:
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%'));
答案 2 :(得分:16)
根据这个很酷的技巧@maniek showed earlier today使用LIKE ANY(ARRAY['AAA%', 'BBB%', 'CCC%'])
。
答案 3 :(得分:1)
您可以使用正则表达式运算符(〜),如Pattern Matching
中所述,以( | )分隔select column_a from table where column_a ~* 'aaa|bbb|ccc'
答案 4 :(得分:0)
如果实际上不需要通配符,则可以使用IN。
选择* 从表 列IN('AAA','BBB','CCC')
答案 5 :(得分:0)
以下查询对我有所帮助。您可以使用LIKE
来代替~*
。
select id, name from hosts where name ~* 'julia|lena|jack';