You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle如何从给定日期列表生成对应连续时间段列表

实现方案

完全可以实现,用Oracle内置的LEAD分析函数就能快速完成需求,不需要复杂的自定义逻辑。

核心逻辑说明

  • 用LEAD窗口函数按日期排序后,取当前行的下一个日期值
  • 非最后一行的结束日期 = 下一个日期 - 1天
  • 最后一行没有下一个日期,直接取当前日期作为结束日期

完整查询示例

我们先用CTE构造你给出的测试日期,你可以把CTE部分替换成你自己的业务表查询逻辑:

WITH original_dates AS (
    -- 此处为测试数据,替换为你的实际日期查询语句即可
    SELECT DATE '2021-02-15' dt FROM DUAL UNION ALL
    SELECT DATE '2021-04-12' dt FROM DUAL UNION ALL
    SELECT DATE '2021-07-28' dt FROM DUAL UNION ALL
    SELECT DATE '2021-08-31' dt FROM DUAL
)
SELECT 
    dt AS period_start,
    -- 取下一个日期减1,最后一行没有下一个日期就用当前日期作为结束
    NVL(LEAD(dt) OVER (ORDER BY dt) - 1, dt) AS period_end
FROM original_dates
ORDER BY period_start;

运行结果

查询返回的时间段完全符合你的要求:

period_startperiod_end
2021-02-152021-04-11
2021-04-122021-07-27
2021-07-282021-08-30
2021-08-312021-08-31

注意事项

OVER (ORDER BY dt) 中的排序规则一定要和你业务要求的日期顺序一致,避免出现时间段错乱的问题。

内容的提问来源于stack exchange,提问作者Korben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:45:02