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

如何用SQL Server将日期区间行拆分为单日行?

解决方案:SQL Server日期区间拆分行

针对你的需求,我们可以使用**递归CTE(公共表表达式)**来实现日期区间的逐行拆分,这个方法简单直接,适合你提到的极小数据集场景,且能正确处理多ID的情况:

WITH DateRangeCTE AS (
    -- 锚点:获取原始表的所有记录
    SELECT 
        ID,
        STARTDATE AS CurrentDate,
        ENDDATE
    FROM YourTable

    UNION ALL

    -- 递归:逐天生成日期,直到覆盖整个区间
    SELECT 
        ID,
        DATEADD(DAY, 1, CurrentDate) AS CurrentDate,
        ENDDATE
    FROM DateRangeCTE
    WHERE CurrentDate < ENDDATE
)
SELECT 
    ID,
    CurrentDate AS STARTDATE,
    CurrentDate AS ENDDATE
FROM DateRangeCTE
ORDER BY ID, CurrentDate;

逻辑说明:

  1. 锚点成员:先读取原始表的每一行数据,把STARTDATE作为起始日期,保留ID和ENDDATE用于后续递归判断。
  2. 递归成员:每次给当前日期加1天,直到生成的日期等于原始的ENDDATE,确保区间内的每一天都被生成。
  3. 最终查询:将生成的日期同时作为新的STARTDATE和ENDDATE,并按ID和日期排序,得到你需要的结果结构。

这个方案会自动处理不同ID的独立日期区间,不会出现多ID冲突的问题,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:42:49