带有正则表达式的JPQL子字符串

时间:2016-10-06 10:08:43

标签: java sql regex jpa jpql

我有一个包含

行的表格文件夹
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中的子字符串似乎是索引和长度,但我无法参考它是否可以与正则表达式模式一起使用。

1 个答案:

答案 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_LIKEcim似乎是他们都同意如何运作的唯一标志。

相关问题