Oracle 使用分层查询获取两个日期之间的天数
我想在两个给定日期之间生成天数,因此我找到了以下使用分层查询的方法:Oracle 使用分层查询获取两个日期之间的天数,oracle,Oracle,我想在两个给定日期之间生成天数,因此我找到了以下使用分层查询的方法: select CONTACT_ID, S_DATE, E_DATE, trunc(S_DATE)+level-1 dt from CONTACTS connect by trunc(S_DATE)+level-1<=trunc(E_DATE) and prior dbms_random.value is not null and prior CONTACTS.CONTACT
select CONTACT_ID, S_DATE, E_DATE, trunc(S_DATE)+level-1 dt
from CONTACTS
connect by trunc(S_DATE)+level-1<=trunc(E_DATE)
and prior dbms_random.value is not null and prior CONTACTS.CONTACT_ID = CONTACTS.CONTACT_ID;
因此,如果我有以下行:
1,2016-01-01 23:00:00,2016-01-02 05:00:00
上述查询将生成以下输出:
2016-01-01 23:00:00,2016-01-02 05:00:00,2016-01-01 00:00:00
2016-01-01 23:00:00,2016-01-02 05:00:00,2016-01-02 00:00:00
但是我不理解查询是如何工作的,尤其是这一部分:和previor dbms_random.value不为null和previor CONTACTS.CONTACT_ID=CONTACTS.CONTACT_ID
谁能给我解释一下吗?你可以用它得到同样的结果,在我看来这更直观
with data(CONTACT_ID, S_DATE, E_DATE, DT) as (
select CONTACT_ID, S_DATE, E_DATE, S_DATE from CONTACTS
union all
select CONTACT_ID, S_DATE, E_DATE, DT+1 from data where DT+1 <= E_DATE
)
select CONTACT_ID, S_DATE, E_DATE, DT
from data
子查询中的第一个选择定义了初始条件,即在第4列中以S_日期开始
重复执行的第二个选择定义了步骤DT+1,WHERE子句定义了终止条件
递归子查询分解是一种AIK标准,在中介绍,我认为它解释得很好。