我有一个包含一系列作者的专栏。我怎样才能使用~*
运算符来检查其任何值是否与给定的正则表达式匹配?
The ~*
运算符在左侧获取要检查的字符串,在右侧获取要匹配的正则表达式。文档说ANY
操作员必须在右侧,所以,显然
SELECT '^p' ~* ANY(authors) FROM book;
不起作用,因为 PostgreSQL 尝试匹配字符串^p
针对数组中包含的表达式。
任何想法?
第一个明显的想法是使用您自己的正则表达式匹配运算符和交换参数:
create function commuted_regexp_match(text,text) returns bool as
'select $2 ~* $1;'
language sql;
create operator ~!@# (
procedure=commuted_regexp_match(text,text),
leftarg=text, rightarg=text
);
然后你可以像这样使用它:
SELECT '^p' ~!@# ANY(authors) FROM book;
另一种不同的方式是取消数组的嵌套并在 SQL 中制定与 ANY 构造等效的形式:
select bool_or(r) from
(select author ~* '^j' as r
from (select unnest(authors) as author from book) s1
) s2;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)