Oracle sysdate 不等于存储日期 [重复]
Posted
技术标签:
【中文标题】Oracle sysdate 不等于存储日期 [重复]【英文标题】:Oracle sysdate is not equal to a stored date [duplicate] 【发布时间】:2014-08-22 15:23:47 【问题描述】:数据库:Oracle
简化版:
表T有一列:D(DATE类型)
现在桌子是空的。
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。
sysdate 根据http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions172.htm 返回一个日期【问题讨论】:
做一个SELECT SYSDATE FROM DUAL
,它会告诉你问题。
这是我尝试过的,但是 SQL Developer 的日期格式只有 DD-MON-RR,这就是我看不到时间的原因。
【参考方案1】:
sysdate
还包含时间,因此此查询将始终无法返回任何行,因为时间会不断变化
SELECT * FROM T
WHERE D = sysdate;
试试这个
SELECT * FROM T
WHERE trunc(D) = trunc(sysdate);
【讨论】:
谢谢!我认为我的 DATE 不包含时间,因为我的 SQL Developer 没有显示整个格式(仅 DD-MON-RR)。我改成了 DD-MON-RR HH:MI:SS 现在很清楚了。 (NLS > 日期格式)以上是关于Oracle sysdate 不等于存储日期 [重复]的主要内容,如果未能解决你的问题,请参考以下文章