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 个月的日期的主要内容,如果未能解决你的问题,请参考以下文章