МЕНЬШЕ, ЧЕМ ИЛИ РАВНО В Oracle SQL - PullRequest
9 голосов
/ 08 июня 2010
updated_date  = 08-Jun-2010;

У меня такой запрос

select * from asd whre updated_date <= todate('08-Jun-2010', 'dd-MM-yy');

но я не получаю никаких результатов. это работает только если todate это 09-июн-2010 ...

т.е. мой equalto оператор не работает должным образом.

почему это так?

Ответы [ 2 ]

24 голосов
/ 08 июня 2010

В Oracle DATE - это момент времени.Он всегда имеет компонент времени с точностью до секунды.todate('08-Jun-2010', 'dd-Mon-yyyy') в Oracle совпадает с todate('08-Jun-2010 00:00:00', 'dd-Mon-yyyy hh24:mi:ss').Поэтому, если вы выберете строки до этой даты, вы не получите ни одной строки в тот день с компонентом времени, не равным 00:00.

Если вы хотите выбрать все строки до * 1006 включительно*, Я бы предложил использовать:

< to_date('09-06-2010', 'dd-MM-yyyy')

или

<= to_date('08-06-2010 23:59:59', 'dd-MM-yyyy hh24:mi:ss')

Примечание - Я исправил ваш формат даты: вам нужно использовать MON, если хотитеиспользовать сокращенное название месяца.Вместо этого я бы предложил использовать MM, чтобы вы не получили ошибку при изменении настроек клиента (NLS_DATE_LANGUAGE).Также предпочтительнее использовать YYYY вместо YY.

13 голосов
/ 08 июня 2010

Проверьте это,

select to_date('08-Jun-2010', 'dd-MON-yyyy') from dual;

Это равно 2010-06-08 00:00:00. Обратите внимание на время.

У updated_date есть часть времени. Чтобы включить их, используйте этот запрос,

select * from asd where trunc(updated_date) <= to_date('08-Jun-2010', 'dd-MON-yyyy');

Функция TRUNC по умолчанию для параметра даты удалит время.

См. Усечение

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