chm*_*lig 140 sql postgresql
我有一个简单的~25个单词列表.我在PostgreSQL中有一个varchar字段,让我们说列表是['foo', 'bar', 'baz'].我想在我的表中找到任何包含这些单词的行.这会有效,但我想要更优雅的东西.
select *
from table
where (lower(value) like '%foo%' or lower(value) like '%bar%' or lower(value) like '%baz%')
Run Code Online (Sandbox Code Playgroud)
mu *_*ort 208
PostgreSQL还支持完整的POSIX正则表达式:
select * from table where value ~* 'foo|bar|baz';
Run Code Online (Sandbox Code Playgroud)
该~*是不区分大小写的匹配,~是区分大小写的.
另一种选择是使用ANY:
select * from table where value like any (array['%foo%', '%bar%', '%baz%']);
select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);
Run Code Online (Sandbox Code Playgroud)
您可以对任何产生布尔值的运算符使用ANY.我怀疑正则表达式选项会更快,但任何东西都是你工具箱中的有用工具.
Nor*_*ame 143
您可以使用SIMILAR TO支持更改的Postgres' 运算符,即
select * from table where lower(value) similar to '%(foo|bar|baz)%';
Run Code Online (Sandbox Code Playgroud)
jla*_*rcy 12
PostgreSQL中实际上有一个运算符:
SELECT *
FROM table
WHERE lower(value) ~~ ANY('{%foo%,%bar%,%baz%}');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121282 次 |
| 最近记录: |