我有一个包含
行的表格文件夹id | path
1 | root
2 | root.first
3 | root.second
4 | root.first.child1
5 | root.first.child1.grandchild1
6 | root.first.child2
我只需要获取路径为root.first.child1和root.first.child2但不包含root.first.child1.grandchild1的行 我可以使用像
这样的子字符串实现此作为本机查询select path from folder
where substring (path from '((root.first\.)[^\.]+)?') is not null;
我在寻找JPQL中的等价查询。 JPQL中的子字符串似乎是索引和长度,但我无法参考它是否可以与正则表达式模式一起使用。
答案 0 :(得分:0)
似乎没有通用的解决方案,但是你可以在Postgres中创建一个polyfill函数,它允许你在两台服务器上使用POSIX正则表达式。
CREATE OR REPLACE FUNCTION REGEXP_LIKE (IN input text, IN pattern text, IN flags varchar DEFAULT '')
RETURNS BOOLEAN
IMMUTABLE
COST 0.013
AS $$
BEGIN
RETURN array_length(regexp_matches(input, pattern, flags), 1) > 0;
END;
$$ LANGUAGE plpgsql;
成本是对实际数据的粗略测量。
有了这个,您几乎可以在Oracle和PostgreSQL中使用REGEXP_LIKE
。 c
,i
和m
似乎是他们都同意如何运作的唯一标志。