Сравнение двух дат в Oracle после использования функции TO_DATE - PullRequest
0 голосов
/ 10 марта 2020

У меня есть следующий Oracle Запрос, который преобразует текущую дату и поле даты из таблицы в один и тот же формат. Тем не менее, при попытке сравнить два они не равны.

CAST(dstamp As Date), TO_DATE(CURRENT_DATE,'dd-MON-YY HH24.MI.SS','NLS_DATE_LANGUAGE = American')

Приведение используется на поле в моей таблице, оба возвращают.

enter image description here

Однако при добавлении следующего оператора where строки не возвращаются. Я не могу понять, почему они не классифицируются как равные?

WHERE CAST(dstamp As Date) = TO_DATE(CURRENT_DATE,'dd-MON-YY HH24.MI.SS','NLS_DATE_LANGUAGE = American');

Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 10 марта 2020

Если вы пытаетесь проверить, принадлежит ли dstamp к текущему дню, я бы посоветовал:

where dstamp >= trunc(sysdate) and dstamp < trunc(sysdate) + 1

Хотя это немного более многословно, это будет более эффективно, чем применение функции даты к столбец сравнивается. Использование функции в столбце в предикате делает запрос не SARGable, ie он не может использовать существующий индекс.

2 голосов
/ 10 марта 2020

Дата УЖЕ дата. Вам не нужно конвертировать это. Возможно, вам придется удалить компонент времени. Делает ли это то, что вы хотите?

WHERE TRUNC(dstamp) = TRUNC(sysdate)
...