2013-10-13 2 views
4

У меня есть столбец типа даты в таблице, где я храню дату вместе со временем.Запрос даты и времени в оракуле

Я хочу, чтобы запросить его WHERE п Я сделал это так:

select * 
from conference_hall_book 
where to_date(end_time,'dd/mon/yyyy hh24:mi:ss') <= to_date('26/oct/2013 15:00:00','dd/mon/yyyy hh24:mi:ss') 

Но результат имеет 27/10/2013 8:00:00 AM также в колонке END_TIME.

Может ли кто-нибудь помочь мне найти ошибку?

+0

Укажите, пожалуйста, таблицу. –

+2

Разве это не дата уже в вашем столе? Почему вы конвертируете дату в дату? Почему бы не 'to_char()'? – BLaZuRE

+0

end_time is date type – Shanna

ответ

10

Проблема возникает из-за

to_date(end_time,'dd/mon/yyyy hh24:mi:ss')

Это неправильное использование функции to_date. To_date преобразует строку в дату. Когда Oracle увидит это выражение, оно автоматически преобразует значение end_time в строку с использованием настроенного формата даты вашей базы данных/сеанса. Этот формат обычно не включает временную часть, поэтому дата со значением «27/10/2013 8:00:00 AM» будет преобразована в строку «27/10/2013» (если формат даты базы данных dd/mm/yyyy). Ваше выражение to_date затем преобразует строковое значение «27/10/2013» в дату. Итоговое значение даты будет «27/10/2013 00:00:00», поэтому вы потеряете временную часть своей исходной даты.

Простое и правильное решение - отказаться от выражения to_date (end_time) и просто использовать end_time. Это также гарантирует, что если у вас есть индекс в end_time, запрос сможет использовать этот индекс.

select * 
from conference_hall_book 
where end_time <= to_date('26/oct/2013 15:00:00','dd/mon/yyyy hh24:mi:ss') 
+0

Большое вам спасибо – Shanna

Смежные вопросы