МЕНЬШЕ ЧЕМ ИЛИ РАВНЫЙ В Oracle SQL

updated_date  = 08-Jun-2010;

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

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

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

т.е. мой equalto оператор не работает правильно.

почему похож на это это?

9
задан Malachi 4 April 2013 в 16:09
поделиться

2 ответа

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

Если вы хотите выбрать все строки до 08-JUN-2010 включительно, я бы предложил использовать:

< 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 ). Также предпочтительнее использовать ГГГГ вместо ГГ .

25
ответ дан 4 December 2019 в 06:26
поделиться

Check this,

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

It is equal to 2010-06-08 00:00:00. Обратите внимание на время.

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

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

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

Обратитесь к Trunc

13
ответ дан 4 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: