oracle - 在oracle中查询日期时间

标签 oracle date datetime

我在表中有一个日期类型列,我在其中存储日期和时间。

我想通过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')

但结果在 end_time 列中也有 27/10/2013 8:00:00 AM。

谁能帮我找出错误?

最佳答案

出现问题的原因是
to_date(end_time,'dd/mon/yyyy hh24:mi:ss')
这是 to_date 函数的错误用法。 To_date 将字符串转换为日期。
当 Oracle 看到这个表达式时,它会使用数据库/ session 的配置日期格式自动将 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')

关于oracle - 在oracle中查询日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19343225/

相关文章:

ios - 如何将日期绘制为 X 轴 (Swift)

python - yaxis 上的 HourLocator() 引发运行时错误意外超过 Locator.MAXTICK

python - 使用 timedelta 系列绘制直方图

SQL检查组是否包含给定列的某些值(ORACLE)

oracle - pl/sql 嵌套循环

java - Java 中的长数学运算

excel - 如何将周末重新引入当前工作日计算的日期差异中?

sqlite - 在 SQLite FLutter 数据库中创建 DATETIME 列?

Oracle 11g XE - 突然出现 ORA-01034 : ORACLE not available and ORA-27101: shared memory realm does not exist

oracle - 如何将Oracle引用游标提取到表变量中?