当前位置:  开发笔记 > 数据库 > 正文

使用SQL生成一系列日期

如何解决《使用SQL生成一系列日期》经验,为你挑选了3个好方法。

我有一个SQL查询,它接受一个日期参数(如果我把它扔进一个函数),我需要在去年的每一天运行它.

如何生成过去365天的列表,所以我可以使用直接SQL来做到这一点?

显然生成列表0..364也可以,因为我总能:

SELECT SYSDATE - val FROM (...);

user34850.. 87

无需使用超大表或ALL_OBJECTS表:

SELECT TRUNC (SYSDATE - ROWNUM) dt
  FROM DUAL CONNECT BY ROWNUM < 366

会做的.



1> user34850..:

无需使用超大表或ALL_OBJECTS表:

SELECT TRUNC (SYSDATE - ROWNUM) dt
  FROM DUAL CONNECT BY ROWNUM < 366

会做的.


非常感谢你!是否可以使用这种思路来获取sysdate +/- 30之间的所有日期.有关其他人的参考,问题和适用答案请访问http://stackoverflow.com/q/9166877/316847

2> 小智..:
 SELECT (sysdate-365 + (LEVEL -1)) AS DATES
 FROM DUAL connect by level <=( sysdate-(sysdate-365))

如果替换'from'和'to'日期代替sysdate和sysdate-365,则输出将是from和date之间的日期范围.



3> AndrewMcCois..:

最近我遇到了类似的问题并通过这个简单的查询解决了它:

SELECT
  (to_date(:p_to_date,'DD-MM-YYYY') - level + 1) AS day
FROM
  dual
CONNECT BY LEVEL <= (to_date(:p_to_date,'DD-MM-YYYY') - to_date(:p_from_date,'DD-MM-YYYY') + 1);

SELECT
  (to_date('01-05-2015','DD-MM-YYYY') - level + 1) AS day
FROM
  dual
CONNECT BY LEVEL <= (to_date('01-05-2015','DD-MM-YYYY') - to_date('01-04-2015','DD-MM-YYYY') + 1);

结果

01-05-2015 00:00:00
30-04-2015 00:00:00
29-04-2015 00:00:00
28-04-2015 00:00:00
27-04-2015 00:00:00
26-04-2015 00:00:00
25-04-2015 00:00:00
24-04-2015 00:00:00
23-04-2015 00:00:00
22-04-2015 00:00:00
21-04-2015 00:00:00
20-04-2015 00:00:00
19-04-2015 00:00:00
18-04-2015 00:00:00
17-04-2015 00:00:00
16-04-2015 00:00:00
15-04-2015 00:00:00
14-04-2015 00:00:00
13-04-2015 00:00:00
12-04-2015 00:00:00
11-04-2015 00:00:00
10-04-2015 00:00:00
09-04-2015 00:00:00
08-04-2015 00:00:00
07-04-2015 00:00:00
06-04-2015 00:00:00
05-04-2015 00:00:00
04-04-2015 00:00:00
03-04-2015 00:00:00
02-04-2015 00:00:00
01-04-2015 00:00:00

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有