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 不等于存储日期 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中计算两个日期时间的差

在 ORACLE 中从 SYSDATE 中减去日期

Mysql的日期时间使用说明

日期 sysdate 范围与文字日期范围之间的 Oracle

在 oracle 中比较日期与 sysdate

oracle中两个日期如何拼接成一个