Oracle - Сравнение дат с SYSDATE - PullRequest
0 голосов
/ 22 ноября 2018

Мне нужно сравнить дату с датой текущего дня, используя SYSDATE, что-то вроде этого:

SELECT * FROM my_table
WHERE date_column BETWEEN TO_DATE(SYSDATE -3,'dd.mm.yyyy') AND TO_DATE(SYSDATE,'dd.mm.yyyy');

Однако это не дает результата .... Мой вопрос:

На основена принятом ответе здесь мы НИКОГДА не должны сравнивать строки с датой.Но с другой стороны, SYSDATE уже является типом данных Date, и мы не должны сравнивать его с датой - см. Здесь .

Если я заменим TO_DATE на TO_CHAR в верхнем SQL все снова работает.Но функция TO_CHAR преобразуется в String, поэтому Oracle (я полагаю) необходимо снова преобразовать эту строку в дату, чтобы вы заставили Oracle выполнить неявное преобразование типов данных.

Итак, какое должно быть правильное сравнение с датой и SYSDATE, чтобы избежать медленной работы Oracle?

1 Ответ

0 голосов
/ 22 ноября 2018

Вам не нужно вызывать TO_DATE или TO_CHAR:

SELECT *
FROM my_table
WHERE date_column >= TRUNC(SYSDATE - 3) AND date_column < TRUNC(SYSDATE + 1);

Предполагая, что date_column является типом даты, вы должны иметь возможность напрямую сравнивать его с SYSDATE, илиSYSDATE смещение на некоторое количество дней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...