2014-10-02 4 views
0

Я следующий Oracle SQL запрос:JPA: Эквивалент для REGEXP_SUBSTR Оракула

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 с именем query. До сих пор я мог бы сделать запрос только так:

SELECT SUBSTRING(f.col, 0, LENGTH(f.col) - LOCATE('.', REVERSE(f.col))), f.col FROM tab f; 

Я сделал это, как я не смог найти эквивалент в JPA для REGEXP_SUBSTR Oracle. Мой JPA с именем query failed в примерах данных, таких как ABC.A.P01.

Не могли бы вы сообщить мне, как я могу перенести свой SQL-запрос в JPA-запрос с использованием эквивалента для REGEXP_SUBSTR.

+0

Это, наверное, проще сделать это в Java (с помощью 'replaceAll()') после того, как вы получили данные от вызова JPA. –

ответ

0

Я обнаружил, что для REGEXP_SUBSTR в JPA нет эквивалента. Поэтому я решил придерживаться выполнения собственных запросов.

0

Если вы используете eclipselink, используйте SQL для интеграции SQL в оператор JPQL. Это дает альтернативу использованию собственных SQL-запросов просто потому, что для запроса может потребоваться функция, не поддерживаемая в JPQL.

Функция SQL включает в себя как строку SQL (встроенную в инструкцию JPQL), так и аргументы для перевода в строку SQL. Используйте знак вопроса (?) Для определения параметров в SQL, которые переводится из аргументов функции SQL.

Вы можете использовать SQL для вызова функций базы данных с нестандартным синтаксисом, встраивания SQL-литералов и выполнения любых других операций SQL в JPQL. С SQL вы все равно можете использовать JPQL для запроса.

Пример

select o from Entity o order by SQL('REGEXP_SUBSTR(?, ''[0-9]+'', 1, 1)', o.code) 
Смежные вопросы