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

想象一下这种情况 (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

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

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

最佳答案

您也可以使用纯 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 )

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

希望对您有所帮助。

编辑:使用实际表格日期

https://stackoverflow.com/questions/32896697/

相关文章:

php - MDL- componentHandler.upgradeDom();在ajax调用之后

drupal - 在新的 Drupal 8 站点上,子菜单链接没有出现?

regex - R 中 SQL LIKE 运算符的等价物

c# - 如何等待 UploadStringAsync 方法完成

python - 使用 python 请求在 HTTP POST 上规避错误 414

python - 值错误 : continuous is not supported

matlab - 如何迭代matlab中稀疏矩阵中的元素?

ruby-on-rails - 如何显示 Time.now 基于 TimeZone - Rails

bash - 将 Bash Shell 变量传递给 Awk NR 函数

vim - 如何在 Vim 中快速上下(ctrl u 和 ctrl d)重新映射到 ctrl j 和