Sql Oracle sysdate不等于存储的日期
数据库:Oracle 简化版: 表T有一列:D(日期类型) 现在桌子空了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/
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>日期格式)