AI智能
改变未来

列出两个日期间的所有日期(使用oracle的rownum实现在sql中使用循环)

oracle中有一个字段rownum,长期以来只知道它是记录的行号,却没有想过用它做更有价值的事情。
有两个时间点,要求列出这两天之间的所有日期,如2010-04-01和2010-04-10,列出
2010-4-1
2010-4-2
2010-4-3
2010-4-4
2010-4-5
2010-4-6
2010-4-7
2010-4-8
2010-4-9

首先想到的是用环循,可是又不能用存储过程,在sql中怎么用循环?rownum帮了大忙了


SELECT ROWNUM AS FOR_I
FROM ALL_OBJECTS
WHERE ROWNUM < 10;

结果如下:
FOR_I
1
2
3
4
5
6
7
8
9

正是利用rownum自增1的特性可以实现sql中的循环。
下面实现本文刚开始提的需求,列出两个日期间的所有日期:


SELECT TRUNC(TO_DATE(\'2010-04-01\', \'yyyy-mm-dd\')) + ROWNUM - 1 AS DATES
FROM ALL_OBJECTS
WHERE TRUNC(TO_DATE(\'2010-04-01\', \'yyyy-mm-dd\')) + ROWNUM - 1 <
TRUNC(TO_DATE(\'2010-04-10\', \'yyyy-mm-dd\'));

结果如下:
DATES
2010-4-1
2010-4-2
2010-4-3
2010-4-4
2010-4-5
2010-4-6
2010-4-7
2010-4-8
2010-4-9

这里从all_objects中查rownum是因为all_objects有足够多的记录并且是系统表不常会被清空,当然数据过多会影响一定的查询速度,如果循环次数不是很多建议选择记录不是很多的表,有助于提高效率。
如果想改变步长rownum * 2即可。

|皇冠信誉◆清风通讯-[size=medium]黑莓体验中心-BLACKBERRY[/size]全面支持货到付款

[size=medium][align=left][color=red]真诚希望朋友们能留下宝贵意见,不甚感激![/color][/align][/size]

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 列出两个日期间的所有日期(使用oracle的rownum实现在sql中使用循环)