PL/SQL - 计算重叠时间段之间的不同天数

4ev*_*ing 2 oracle plsql oracle11g

想象一下这个场景(YYYY/MM/DD):

Start date: 2015/01/01 End date: 2015/08/10 
Start date: 2014/10/03 End date: 2015/07/06 
Start date: 2015/09/30 End date: 2016/04/28
Run Code Online (Sandbox Code Playgroud)

使用 PL/SQL 可以计算这些重叠日期之间的不同天数吗?

编辑:我的表有 2 个 DATE 列,Start_Date 和 End_Date。我期待的结果是 515 天 ((2015/08/10 - 2014/10/03) + (2016/04/28 -2015/09/30))

igr*_*igr 5

您也可以使用纯 SQL(不需要 PL/SQL):

    with 
    minmax as (select min(start_date) min_dt, max(end_date) max_dt from myTable ), 
    dates as (
SELECT min_dt + rownum-1 dt1
FROM minmax CONNECT BY ROWNUM <= (max_dt - min_dt +1)
)
select count(*) from dates
where exists( 
 select 1 from MyTable T2 
 where dates.dt1 between T2.start_date and T2.end_date )
Run Code Online (Sandbox Code Playgroud)

注意:一个想法,从头脑中写出来,未经测试。根据需要调整生成的日期,包括开始日期和所需长度。

希望能帮助到你。

编辑:使用实际表日期