Sql Oracle sysdate不等于存储的日期

Sql Oracle sysdate不等于存储的日期,sql,oracle,where-clause,precision,sysdate,Sql,Oracle,Where Clause,Precision,Sysdate,数据库:Oracle 简化版: 表T有一列:D(日期类型) 现在桌子空了 INSERT INTO T (D) VALUES (sysdate); 现在该表有一行包含2014年8月22日 为什么下面的WHERE子句为false SELECT * FROM T WHERE D = sysdate; =>0行 以下查询工作正常: SELECT * FROM T WHERE TO_CHAR(D, 'DD/MM/YYYY') = TO_CHAR(sysdate, 'DD/MM/

数据库:Oracle

简化版:

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

现在桌子空了

INSERT INTO T
    (D) VALUES (sysdate);
现在该表有一行包含2014年8月22日

为什么下面的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),但为什么可能呢?因为这两种类型都是日期

  • sysdate根据返回日期

sysdate
还包括时间,因此此查询将始终无法返回任何行,因为时间将不断变化

SELECT * FROM T
    WHERE D = sysdate;
试试这个

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

执行一个
从DUAL
选择SYSDATE,它将向您显示问题。这是我尝试过的,但是SQL Developer只有DD-MON-RR作为日期格式,这就是为什么我看不到时间。谢谢!我认为我的日期不包含时间,因为我的SQL开发人员没有显示整个格式(只有DD-MON-RR)。我改成DD-MON-RR HH:MI:SS,现在很清楚了。(NLS>日期格式)