出现问题是因为
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')