我有以下Oracle SQL查询:
SELECT SUBSTR(col, 0, INSTR(col, REGEXP_SUBSTR(col, '\.\d+$')) -1) AS col_new, col as col_orig AS col_orig FROM tab;
我的表格数据如下:
col
ABC.A.01
ABC.A.02
以上查询返回的结果如下:
col_new col_orig
ABC.A ABC.A.01
ABC.A ABC.A.02
我正在尝试将其迁移到JPA命名查询。直到现在我才能像这样进行查询:
SELECT SUBSTRING(f.col, 0, LENGTH(f.col) - LOCATE('.', REVERSE(f.col))), f.col FROM tab f;
我之所以这样做是因为我无法在JPA for Oracle的REGEXP_SUBSTR中找到相应的内容。我的JPA命名查询在ABC.A.P01等数据示例中失败。
是否可以告诉我如何使用REGEXP_SUBSTR的等效项将我的SQL查询迁移到JPA命名查询。
答案 0 :(得分:0)
我发现JPA中没有REGEXP_SUBSTR的等价物。所以我决定坚持原生查询执行。
答案 1 :(得分:0)
如果您使用的是eclipselink,请使用SQL在SQLQL语句中集成SQL。这提供了使用本机SQL查询的替代方法,因为查询可能需要JPQL中不支持的函数。
SQL函数包括SQL字符串(内联到JPQL语句中)和要转换为SQL字符串的参数。使用问号字符(?)来定义SQL中从SQL函数参数转换的参数。
您可以使用SQL以非标准语法调用数据库函数,嵌入SQL文本,并在JPQL中执行任何其他SQL操作。使用SQL,您仍然可以使用JPQL进行查询。
实施例
select o from Entity o order by SQL('REGEXP_SUBSTR(?, ''[0-9]+'', 1, 1)', o.code)