ROM*_*eer 0 sql oracle precision where-clause sysdate
数据库:Oracle
简化版:
表T有一列:D(DATE类型)
现在桌子是空的.
INSERT INTO T
(D) VALUES (sysdate);
Run Code Online (Sandbox Code Playgroud)
现在该表有一行包含22-AUG-14.
为什么以下WHERE子句为false?
SELECT * FROM T
WHERE D = sysdate;
Run Code Online (Sandbox Code Playgroud)
=> 0行
以下查询有效:
SELECT * FROM T
WHERE TO_CHAR(D, 'DD/MM/YYYY') = TO_CHAR(sysdate, 'DD/MM/YYYY');
Run Code Online (Sandbox Code Playgroud)
=> 1行
我认为与时间相关的"精度损失"(类似于double和int),但为什么可能呢?因为这两种类型都是DATE.
sysdate 还包括时间,因此随着时间的推移,此查询将始终无法返回任何行
SELECT * FROM T
WHERE D = sysdate;
Run Code Online (Sandbox Code Playgroud)
试试这个
SELECT * FROM T
WHERE trunc(D) = trunc(sysdate);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5542 次 |
| 最近记录: |