如何在PostgreSQL中使用具有多个值的SQL LIKE条件?

时间:2012-10-18 15:17:40

标签: sql postgresql postgresql-9.1

有没有更短的方法来寻找多个匹配项:

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

这个问题适用于PostgreSQL 9.1,但是如果有通用的解决方案,那就更好了。

6 个答案:

答案 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';