oracle 计算某段时间内的天数

k5hmc34c  于 2022-11-22  发布在  Oracle
关注(0)|答案(1)|浏览(210)

我 有 一 个 连接 到 数据 库 的 表单 , 所以 这个 表单 可以 有 更多 的 块 , 其中 每个 块 都 有 日期 从 , 日期 到 , 例如
| 区块|起始 日期 ( _ F )|截止 日期 ( _ U )|
| - -| - -| - -|
| 一 个|二零二二 年 七 月 二十五 日|二零二二 年 八 月 十一 日|
| 2 个|二 〇 二二 年 八 月 五 日|二零二二 年 八 月 十五 日|
| 三 个|二 〇 二二 年 八 月 十 日|二零二二 年 八 月 二十 日|
| 四 个|二零二二 年 八 月 十一 日|2022 年 9 月 5 日|
我 正在 尝试 创建 一 个 SELECT 语句 , 它 将 显示 01.08.202231.08.2022 之间 的 天数 。

  • 第 一 个 区段 起始 日期 = 2022 年 7 月 25 日 , 截止 日期 = 2022 年 8 月 11 日 - 〉 11 天
  • 第 二 个 块 和 第 三 个 块 应 保持 NULL 或 某些 默认 文本 , 因为 这些 块 的 间隔 在 第 四 个 块 中 。
  • 第 四 个 块 日期 _ from = 11.08.2022 , 日期 _ until = 05.09.2022 - 〉 20 天 ( 直到 月底 ) 。

你 能 帮 我 创建 这个 选择 吗 ? 选择 应该 有 date_fromdate_untilnumber of days

cfh9epnr

cfh9epnr1#

WITH data(Block,Date_From,Date_until) AS (
    SELECT 1, TO_DATE('25.07.2022','DD.MM.YYYY'), TO_DATE('11.08.2022','DD.MM.YYYY') FROM DUAL UNION ALL
    SELECT 2, TO_DATE('05.08.2022','DD.MM.YYYY'), TO_DATE('15.08.2022','DD.MM.YYYY') FROM DUAL UNION ALL
    SELECT 3, TO_DATE('10.08.2022','DD.MM.YYYY'), TO_DATE('20.08.2022','DD.MM.YYYY') FROM DUAL UNION ALL
    SELECT 4, TO_DATE('11.08.2022','DD.MM.YYYY'), TO_DATE('05.09.2022','DD.MM.YYYY') FROM DUAL -- UNION ALL
),
clipped(Block,Date_From,Date_until) AS (
    SELECT Block, GREATEST(Date_From, TO_DATE('01.08.2022','DD.MM.YYYY')), LEAST(Date_until, TO_DATE('31.08.2022','DD.MM.YYYY')) FROM DATA
)
SELECT c.*, 
    CASE WHEN NOT(
        EXISTS(SELECT 1 FROM clipped d WHERE d.Date_From < c.Date_until AND d.Date_until > c.Date_From AND d.block < c.block) 
        AND
        EXISTS(SELECT 1 FROM clipped d WHERE d.Date_From < c.Date_until AND d.Date_until > c.Date_From AND d.block > c.block) )
        THEN c.Date_until - c.Date_from  ELSE NULL
    END AS days
FROM clipped c
ORDER BY c.block 
;

1   01/08/22    11/08/22    10
2   05/08/22    15/08/22    
3   10/08/22    20/08/22    
4   11/08/22    31/08/22    20

相关问题