我试图使用以下查询从我的表中选择一些数据:
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
的文档。有人可以解释为什么会这样吗?
更新
根据有价值的评论,我认为某些time
值也可能与DATE相关联。但我无法查看/编辑time
。如何确保关联time
个值。
答案 0 :(得分:3)
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
进行比较,该字段也包含时间值。而在您的第二个查询中,您正在从表数据和查询中截断时间部分,这就是它匹配的原因。
答案 1 :(得分:2)
DATE数据类型存储年份(包括世纪),月份,日期,小时,分钟和秒数(午夜之后)。
TRUNC功能会将日期截断为日期值,以便截断任何小时,分钟或秒。
欲了解更多信息,请查看以下链接
http://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT413