数据库: 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。
答案 0 :(得分:7)
sysdate
还包含时间,因此随着时间的推移,此查询将始终无法返回任何行
SELECT * FROM T
WHERE D = sysdate;
试试这个
SELECT * FROM T
WHERE trunc(D) = trunc(sysdate);