首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oracle上的Date函数

oracle上的Date函数
EN

Stack Overflow用户
提问于 2011-08-17 21:46:51
回答 5查看 1.1K关注 0票数 1

我有一个关于oracle上的日期函数的问题。

我有下面的表格

代码语言:javascript
复制
statistic_table(
   pages AS varchar(10),
   date_created AS date
);

我有以下sql语句

代码语言:javascript
复制
SELECT COUNT(*) FROM statistic_table WHERE date_created BETWEEN sysdate-5 AND sysdate-1
and
SELECT COUNT(*) FROM statistic_table WHERE date_created BETWEEN to_date('12-AUG-2011') AND to_date('16-AUG-2011');

问题是,为什么它返回不同的数字。假设sysdate-5返回2011年8月12日,sysdate-1返回2011年8月16日

任何帮助都将不胜感激!

干杯,

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-17 21:52:32

Oracle中的日期是精度为秒的时间点。

SYSDATE返回当前日期和时间,因此与to_date('17-AUG-2011')不同

代码语言:javascript
复制
SQL> SELECT to_char(sysdate, 'dd-mon-yyyy hh24:mi:ss') FROM DUAL;

TO_CHAR(SYSDATE,'DD-MON-YYYYHH
------------------------------
17-aug-2011 15:52:13

如果只需要date组件,请使用TRUNC函数:

代码语言:javascript
复制
SQL> SELECT to_char(trunc(sysdate), 'dd-mon-yyyy hh24:mi:ss') FROM DUAL;

TO_CHAR(TRUNC(SYSDATE),'DD-MON
------------------------------
17-aou-2011 00:00:00
票数 3
EN

Stack Overflow用户

发布于 2011-08-17 21:52:47

sysdate -5将为您提供当前时间的日期。因此,如果我在下午1点准确地运行它,那么查询将等同于:

代码语言:javascript
复制
select (*) 
FROM statistic_table 
WHERE date_created BETWEEN to_date('12-Aug-2011 13:00:00') 
                       AND to_date('16-Aug-2011 13:00:00')

而第二个查询是:

代码语言:javascript
复制
select (*) 
FROM statistic_table 
WHERE date_created BETWEEN to_date('12-Aug-2011 00:00:00') 
                       AND to_date('16-Aug-2011 00:00:00')

您可能应该尝试以下操作:

代码语言:javascript
复制
select (*) 
FROM statistic_table 
WHERE date_created BETWEEN trunc(sysdate) -5 
                       AND trunc(sysdate) -1
票数 5
EN

Stack Overflow用户

发布于 2011-08-17 21:52:23

因为SYSDATE包含时间组件,所以如果当前时间是11:22:33,那么

代码语言:javascript
复制
SELECT COUNT(*) FROM statistic_table 
WHERE date_created BETWEEN sysdate-5 AND sysdate-1

实际上相当于

代码语言:javascript
复制
SELECT COUNT(*) FROM statistic_table
WHERE date_created BETWEEN to_date('12-AUG-2011 11:22:33','DD-MON-YYYY HH24:MI:SS')
                       AND to_date('16-AUG-2011 11:22:33','DD-MON-YYYY HH24:MI:SS')

要避免time组件,请执行以下操作:

代码语言:javascript
复制
SELECT COUNT(*) FROM statistic_table 
WHERE date_created BETWEEN TRUNC(sysdate)-5 AND TRUNC(sysdate)-1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7093915

复制
相关文章

相似问题

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