从日期范围创建oracle表行

时间:2018-06-27 05:58:30

标签: oracle oracle11g

我有一个表,其中包含用于存储日期的列

STARTDATE  |  ENDDATE
01/04/2018 |  05/04/2018
07/04/2018 |  08/04/2018

我想编写一个可以给我结果的简单查询。

DATE
01/04/2018
02/04/2018
03/04/2018
04/04/2018
05/04/2018
07/04/2018
08/04/2018

甲骨文有可能吗?

1 个答案:

答案 0 :(得分:1)

Oracle日期支持算术运算。 sysdate+1是明天。

我们可以使用Oracle's hierarchical syntax,CONNECT BY来生成行。伪列LEVEL为我们提供了所需的增量。

棘手的部分是处理表中的多行。除非我们可以将生成的行绑定到它们的PRIOR行,否则CONNECT BY将生成一个产品。理想情况下,源表具有可以用作锚的主键;您发布的表缺少其中之一,但是我们可以用ROWID代替。

select startdate + (level-1) as gendate
from t23
connect by level <= (enddate-startdate)+1
            and t23.rowid = prior t23.rowid
            and prior sys_guid() is not null
order by 1

and prior sys_guid() is not null不直观,但可以防止ORA-01436: CONNECT BY loop in user data

这里是a SQL Fiddle demo