Oracle sysdate不等于存储日期

时间:2014-08-22 15:23:48

标签: sql oracle where-clause precision sysdate

数据库: Oracle

简化版:

T 有一列: D (日期类型)

现在桌子是空的。

INSERT INTO T
    (D) VALUES (sysdate);

现在该表有一行包含22-AUG-14。

为什么是以下WHERE子句 false

SELECT * FROM T
    WHERE D = sysdate;

=> 0行

以下查询有效:

SELECT * FROM T
    WHERE TO_CHAR(D, 'DD/MM/YYYY') = TO_CHAR(sysdate, 'DD/MM/YYYY');

=> 1行

我认为有一个"失去了精确度"与时间相关(类似于double& int),但为什么可能呢?因为这两种类型都是DATE。

1 个答案:

答案 0 :(得分:7)

sysdate还包含时间,因此随着时间的推移,此查询将始终无法返回任何行

SELECT * FROM T
    WHERE D = sysdate;

试试这个

SELECT * FROM T
    WHERE trunc(D) = trunc(sysdate);