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%}');