首页 > 解决方案 > 在sql中将日期范围拆分为按天计算的行

问题描述

我有一个有 3 列的表

在此处输入图像描述

我想根据 Promo_Period_Start 和 Promo_Period_End 每天拆分

我尝试的是以下

declare @d datetime;
set @d = getdate();

select *
from   [dbo].[T]
where  @d between Promo_Period_Start and Promo_Period_End

样本数据

在此处输入图像描述

标签: sql-server

解决方案


使用递归 CTE

;WITH cte AS (
    SELECT ID, Promo_Period_Start,Promo_Period_End
    FROM T
    UNION ALL
    SELECT ID, DATEADD(day, 1, Promo_Period_Start), Promo_Period_End
    FROM cte
    WHERE Promo_Period_Start < Promo_Period_End
)
SELECT * FROM cte

推荐阅读