updated_date = 08-Jun-2010;
У меня есть запрос как это
select * from asd whre updated_date <= todate('08-Jun-2010', 'dd-MM-yy');
но я не получаю результатов. это только работает если todate
09 июня 2010...
т.е. мой equalto
оператор не работает правильно.
почему похож на это это?
В 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
). Также предпочтительнее использовать ГГГГ
вместо ГГ
.
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