Answers:
您可以使用SIMILAR TO
支持交替的Postgres 运算符,即
select * from table where lower(value) similar to '%(foo|bar|baz)%';
SIMILAR TO
在内部转换为正则表达式搜索
lower()
是无效的,因为它将首先将每个字符串转换为小写,这比不区分大小写的匹配要昂贵得多
PostgreSQL还支持完整的POSIX正则表达式:
select * from table where value ~* 'foo|bar|baz';
该~*
是不区分大小写的匹配,~
是区分大小写的。
另一种选择是使用ANY:
select * from table where value like any (array['%foo%', '%bar%', '%baz%']);
select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);
您可以对产生布尔值的任何运算符使用ANY。我怀疑正则表达式选项会更快,但是ANY是可用于工具箱的有用工具。
PostgreSQL中实际上有一个运算符:
SELECT *
FROM table
WHERE lower(value) ~~ ANY('{%foo%,%bar%,%baz%}');
~~
只是“”的另一个名称like
:“运算符~~
等效于LIKE
,并且~~*
对应于ILIKE
。还有!~~
和!~~*
运算符分别表示NOT LIKE
和NOT ILIKE
。所有这些运算符都是PostgreSQL特定的。” 。并且'{%foo%,%bar%,%baz%}'
是的文本形式array['%foo%', '%bar%', '%baz%']
。
一种“优雅”的解决方案是使用全文搜索:http : //www.postgresql.org/docs/9.0/interactive/textsearch.html。然后,您将使用全文本搜索查询。