Как искать строку как число, используя именованные запросы в Hibernate и Oracle? - PullRequest
0 голосов
/ 24 сентября 2019

В Oracle Datatype - это vArchar, и у нас есть некоторые идентификаторы, сохраненные в формате 0000123. Из источника мы получаем идентификатор как 123 или 1234 с предшествующим 0. В некоторых случаях данные хранятся просто как 123.

ВSQL-запрос, я могу просто использовать

Select * from Table where ID = 123 (It wil fetch even if 000123 id is present)

Есть ли способ добиться этого с помощью именованного запроса через Hibernate, как в настоящее время в Oracle, это строка против Varchar и при поиске 123 не возвращает правильные результаты .?

Ответы [ 3 ]

0 голосов
/ 24 сентября 2019

Если вы получаете ошибку при применении ответа Radagast81, попробуйте преобразовать число в varchar, используя to_char() следующим образом:

SELECT
    *
FROM
    EMPS
WHERE
    LTRIM(EMP_NAME, '0') = TO_CHAR(LTRIM(123, '0'));

Вы также можете использовать LPAD для достижения того же:

SELECT
    *
FROM
    EMPS
WHERE
    EMP_NAME = LPAD(123, LENGTH(EMP_NAME), '0'));

Ура !!

0 голосов
/ 24 сентября 2019

Если вы можете назначить номер по умолчанию, которого нет в таблице, вы можете использовать его.см. пример ниже:

Select * from Table where TO_NUMBER(ID DEFAULT -999999999999 ON CONVERSION ERROR ) = 123
0 голосов
/ 24 сентября 2019

Запрос автоматически преобразуется в следующее:

Select * from Table where TO_NUMBER(ID) = 123

, поэтому вы можете использовать его вместо этого.

Вы также можете использовать:

SELECT * from Table where LTRIM(ID,'0') = LTRIM(123,'0')

, если естьнечисловые значения в столбце идентификатора.

...