【问题标题】:Oracle sysdate is not equal to a stored date [duplicate]Oracle sysdate 不等于存储日期 [重复]
【发布时间】: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。

【问题讨论】:

  • 做一个SELECT SYSDATE FROM DUAL,它会告诉你问题。
  • 这是我尝试过的,但是 SQL Developer 的日期格式只有 DD-MON-RR,这就是我看不到时间的原因。

标签: sql oracle where-clause precision sysdate


【解决方案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 > 日期格式)
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 2017-12-17
  • 2012-08-17
  • 1970-01-01
  • 2015-10-06
  • 2012-02-27
  • 2011-11-06
  • 1970-01-01
相关资源
最近更新 更多