В своем комментарии выше вы говорите, что точное выражение, используемое в Oracle, было:
DBMS_CRYPTO.hash( UTL_RAW.CAST_TO_RAW( UPPER(to_date('01.02.1980', 'dd.mm.yyyy')) ),2 )
Итак, вы берете строку '01 .02.1980 'и конвертируете ее в DATE
, используя соответствующий формат.Затем вы передаете результат этого на UPPER()
;это приведет к неявному преобразованию DATE
в строку с использованием формата даты по умолчанию для сеанса.Таким образом, результат этого выражения может быть другим, если он выполняется в разных средах.
Чтобы попытаться воспроизвести одно и то же значение хеш-функции в Java, используйте формат даты, указанный параметром экземпляра NLS_DATE_FORMAT
.Но возможно, что это сработало бы для некоторых записей, но не для других, поскольку используемый формат даты мог бы варьироваться.
В принципе, у вас очень серьезная ошибка в коде Oracle, который создал и сохранил эти значения хеш-функции.Неявное преобразование даты в строку может быть опасным.