oracle 中过去 12 个月的日期

Posted

技术标签:

【中文标题】oracle 中过去 12 个月的日期【英文标题】:dates of past 12 months in oracle 【发布时间】:2013-10-21 19:34:15 【问题描述】:

需要一个列出过去 12 个月的所有日期的查询

假设我当前的日期是 2013 年 10 月 21 日。需要使用sysdate来获取数据

结果应该是这样的

10/21/2013
...
10/01/2013
09/30/2013
...
09/01/2013
...
01/31/2013
...
01/01/2013
...
11/30/2012
...
11/01/2012

请帮帮我.. 提前致谢。

平均

【问题讨论】:

How to populate calendar table in Oracle?的可能重复 【参考方案1】:

允许闰年和所有,通过使用 add_months 计算 12 个月前的日期,从而生成多少行......

select trunc(sysdate) - rownum + 1 the_date
from   dual
connect by level <= (trunc(sysdate) - add_months(trunc(sysdate),-12))

【讨论】:

【参考方案2】:

你可以这样做:

select to_date('21-oct-2012','dd-mon-yyyy') + rownum -1
from all_objects
where rownum <= 
    to_date('21-oct-2013','dd-mon-yyyy') - to_date('21-oct-2012','dd-mon-yyyy')+1

当然,您可以使用开始和结束日期的参数以使其更实用。

-或- 使用 sysdate,像这样:

select sysdate + interval '-1' year + rownum -1
from all_objects
where rownum <= 
    sysdate - (sysdate + interval '-1' year)

【讨论】:

all_objects 在模式访问很少对象的情况下失败 如果有复杂的角色集,它也可能相当慢。【参考方案3】:
Try this

SELECT SYSDATE,
       SYSDATE-1,
       <continue>   
       SYSDATE-30,         
       <continue>
        .........
       <continue>    
       SYSDATE-364,
       SYSDATE-365

FROM DUAL;

【讨论】:

有没有简单的解决方案。我阅读了一些帖子,其中他们使用“Connect by”子句来完成这项工作。

以上是关于oracle 中过去 12 个月的日期的主要内容,如果未能解决你的问题,请参考以下文章

如何为过去 3 个月的每个日期运行查询

使用图表显示过去 12 个月的注册用户分析

sql 怎么查询每一年1到12个月的数据

使用Scala从给定月份获取前12个月的月底日期

计算每个月过去 12 个月的平均值?

如何从当前日期 PHP 获取最近 7 周、7 个月的日期范围?