根据日期列选择数据

时间:2014-05-28 11:33:05

标签: oracle

我试图使用以下查询从我的表中选择一些数据:

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个值。

enter image description here

2 个答案:

答案 0 :(得分:3)

TO_DATETRUNC都不同。请参阅以下示例。

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

http://www.techonthenet.com/oracle/functions/trunc_date.php