首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle 11g:比较日期

Oracle 11g:比较日期
EN

Stack Overflow用户
提问于 2013-07-01 22:54:08
回答 2查看 3.1K关注 0票数 1

为什么这两个select查询

代码语言:javascript
复制
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行吗?

代码语言:javascript
复制
select to_timestamp(d), to_timestamp(sysdate) from tmp;

清楚地表明两列是相等的:

代码语言:javascript
复制
TO_TIMESTAMP(D)             | TO_TIMESTAMP(SYSDATE)
July, 01 2013 00:00:00+0000 | July, 01 2013 00:00:00+0000

SQL Fiddle example

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-01 23:09:18

您的INSERT添加了一个带有时间的日期,因为SYSDATE包含一个精确到一秒的时间组件。

您的第一个SELECT没有返回任何内容,因为在您运行它的时候,SYSDATE有一个不同的值,一个比您执行INSERT时的SYSDATE值更早的值。

您的第二个SELECT没有返回任何内容,因为它没有时间。正如mishik指出的,如果你TRUNC SYSDATEtmp.d的值,你会得到一个匹配。

在这里,您不想使用TO_TIMESTAMP函数来验证值。它忽略日期的时间部分。此查询...

代码语言:javascript
复制
SELECT TO_TIMESTAMP(TO_DATE('7/1/2013 12:34:56', 'MM/DD/YYYY HH24:MI:SS'))
FROM DUAL;

..。将只返回日期7/2/2013,不带时间部分。

要查看实际插入的内容,请执行以下操作以查看每个值的时间部分:

代码语言:javascript
复制
SELECT TO_CHAR(d, 'MM/DD/YYYY HH24:MI:SS') FROM tmp;
票数 3
EN

Stack Overflow用户

发布于 2013-07-01 22:57:39

当比较trunc(sysdate)时-你也应该trunc d

代码语言:javascript
复制
select * from tmp where trunc(d) = trunc(sysdate);

简单的d=sysdate将不起作用,因为sysdate在插入后发生了变化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17407439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档