我尝试使用以下查询从表中选择一些数据:
select * from table1 where column1 = to_date('14-05-14','yy-mm-dd');
其中列数据类型为DATE
。我观察到,上面的查询不会返回任何内容,除非我们将其修改为,
select * from table1 where trunc(column1) = to_date('14-05-14','yy-mm-dd');
即使有可用的记录。
我检查了 TRUNC
的文档。任何人都可以解释为什么会发生这种情况吗?
更新
根据宝贵的评论,我认为某些时间
值也可能与日期相关联。但我无法查看/编辑该时间
。如何确保存在关联的时间
值。
最佳答案
TO_DATE
和 TRUNC
是不同的。请参阅下面的示例。
SQL> ALTER SESSION SET nls_date_format = 'dd/mm/yyyy hh24:mi:ss';
Session altered.
SQL> SELECT TO_DATE(SYSDATE) FROM DUAL;
TO_DATE(SYSDATE)
-------------------
28/05/2014 16:03:25
SQL> SELECT TRUNC(SYSDATE) FROM DUAL;
TRUNC(SYSDATE)
-------------------
28/05/2014 00:00:00
在您的第一个查询中,to_date('14-05-14','yy-mm-dd')
正在与表中的日期字段 column1
进行比较,其中也有时间值。而在您的第二个查询中,您从表数据和查询中截断了时间部分,这就是它匹配的原因。
关于oracle - 根据日期列选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23910501/