2

数据库:甲骨文

简化版:

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

现在桌子是空的。

INSERT INTO T
    (D) VALUES (sysdate);

现在该表有一行包含 22-AUG-14。

为什么以下 WHERE 子句为

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。

4

1 回答 1

9

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

SELECT * FROM T
    WHERE D = sysdate;

试试这个

SELECT * FROM T
    WHERE trunc(D) = trunc(sysdate);
于 2014-08-22T15:26:22.133 回答