TO_DATE( date_string, format_model )
Принимает строку в качестве первого аргумента. Предполагая, что paydate
является типом данных DATE
, вы просите Oracle неявно преобразовать paydate
из DATE
в строку (которая будет использовать параметр сеанса NLS_DATE_FORMAT
), а затем передать его в TO_DATE
функция преобразования его обратно в дату.
Итак, ваш запрос эффективен:
SELECT *
FROM <old_table_name>
WHERE paydate =TO_DATE(
TO_CHAR(
paydate,
( SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT' )
),
'YYYYMMDD'
);
Если NLS_DATE_FORMAT
не соответствует YYYYMMDD
, вы либо получите исключение, либо неожиданное поведение.
Вместо этого, если вы хотите сравнить дату с самим собой и выяснить, находится ли ее компонент времени в полночь, просто используйте TRUNC
:
SELECT *
FROM <old_table_name>
WHERE paydate = TRUNC( paydate );