postgres查询选择elements
,其中的name
列包含来自数组的任意字符串:
select "elements".* from "elements" where "elements"."name" ~* 'hap|bir'
这很好。
现在, 仅当列包含数组的每个字符串(无特定顺序)时,用于选择元素的正则表达式模式是什么?
答案 0 :(得分:1)
您的查询使用数组产生与以下非正则表达式LIKE
表达式相同的结果
SELECT *
FROM elements
WHERE lower(name) LIKE ANY(ARRAY['%hap%', '%bir%']);
因此,要仅在列包含数组的每个字符串时从元素中进行选择,请将其从ANY
更改为ALL
SELECT *
FROM elements
WHERE lower(name) LIKE ALL(ARRAY['%hap%', '%bir%']);
答案 1 :(得分:0)
这里是一个正则表达式模式,仅当列包含数组的每个字符串(不按特定顺序)时,才选择elements
:
select "elements".* from "elements" where "elements"."name" ~* '(?=.*?(hap))(?=.*?(bir))'
来自here。
答案 2 :(得分:0)
猜猜是什么,您实际上可以将regexp匹配运算符与ALL
组合在一起用于数组。
SELECT *
FROM elements
WHERE name ~* ALL(ARRAY['\mhap\M', '\mbir\M'])
如果您的搜索文本不是单个字段,而是多个字段的串联,则这可能特别有利。
(注意:\m
是单词的开头,\M
是单词的结尾。)