我有一个表,其中包含用于存储日期的列
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
甲骨文有可能吗?
答案 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
。