Oracle sysdate不等于存储日期

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.

Lok*_*esh 7

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)