PostgreSQL通配符LIKE用于任何一个单词列表
我有一个简单的〜25字的清单。 我在PostgreSQL中有一个varchar字段,假设列表是['foo', 'bar', 'baz']
。 我想在我的表中find任何有这些单词的行。 这会有用,但我想要更优雅的东西。
select * from table where (lower(value) like '%foo%' or lower(value) like '%bar%' or lower(value) like '%baz%')
你可以使用Postgres的SIMILAR TO
操作符来支持更改,也就是说
select * from table where lower(value) similar to '%(foo|bar|baz)%';
PostgreSQL也支持完整的POSIX正则expression式 :
select * from table where value ~* 'foo|bar|baz';
~*
表示不区分大小写, ~
区分大小写。
另一种select是使用ANY :
select * from table where value like any (array['%foo%', '%bar%', '%baz%']); select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);
你可以使用任何运算符来产生一个布尔值。 我怀疑正则expression式选项会更快,但ANY是在你的工具箱中有用的工具。
一个“优雅”的解决scheme是使用全文search: http : //www.postgresql.org/docs/9.0/interactive/textsearch.html 。 那么你会使用全文search查询。
实际上在PostgreSQL中有一个操作符:
SELECT * FROM table WHERE lower(value) ~~ ANY('{%foo%,%bar%,%baz%}');