为什么这两个select查询
create table tmp (d date);
insert into tmp (d) values (sysdate);
select * from tmp where d = sysdate;
select * from tmp where d = trunc(sysdate);都返回0行吗?
select to_timestamp(d), to_timestamp(sysdate) from tmp;清楚地表明两列是相等的:
TO_TIMESTAMP(D) | TO_TIMESTAMP(SYSDATE)
July, 01 2013 00:00:00+0000 | July, 01 2013 00:00:00+0000SQL Fiddle example
发布于 2013-07-01 23:09:18
您的INSERT添加了一个带有时间的日期,因为SYSDATE包含一个精确到一秒的时间组件。
您的第一个SELECT没有返回任何内容,因为在您运行它的时候,SYSDATE有一个不同的值,一个比您执行INSERT时的SYSDATE值更早的值。
您的第二个SELECT没有返回任何内容,因为它没有时间。正如mishik指出的,如果你TRUNC SYSDATE和tmp.d的值,你会得到一个匹配。
在这里,您不想使用TO_TIMESTAMP函数来验证值。它忽略日期的时间部分。此查询...
SELECT TO_TIMESTAMP(TO_DATE('7/1/2013 12:34:56', 'MM/DD/YYYY HH24:MI:SS'))
FROM DUAL;..。将只返回日期7/2/2013,不带时间部分。
要查看实际插入的内容,请执行以下操作以查看每个值的时间部分:
SELECT TO_CHAR(d, 'MM/DD/YYYY HH24:MI:SS') FROM tmp;发布于 2013-07-01 22:57:39
当比较trunc(sysdate)时-你也应该trunc d:
select * from tmp where trunc(d) = trunc(sysdate);简单的d=sysdate将不起作用,因为sysdate在插入后发生了变化。
https://stackoverflow.com/questions/17407439
复制相似问题