如何在SQL中生成起始到结束日期的连续日期行?
生成指定日期范围内的所有日期(SQL Server)
首先修正你提供的变量声明语法错误,正确写法如下:
Declare @StartDate Date = '2021-01-01'; Declare @EndDate Date = '2022-10-12';
方法一:递归CTE(通用方案)
递归CTE是生成连续日期最常用的方式,逻辑清晰且无需依赖系统表:
Declare @StartDate Date = '2021-01-01'; Declare @EndDate Date = '2022-10-12'; WITH DateSequence AS ( SELECT @StartDate AS Date_R UNION ALL SELECT DATEADD(DAY, 1, Date_R) FROM DateSequence WHERE Date_R < @EndDate ) SELECT Date_R FROM DateSequence OPTION (MAXRECURSION 0); -- 关闭递归层数限制,避免因日期范围过大报错
执行后会生成从2021-01-01到2022-10-12的所有日期,总计649行,完全匹配你的需求。
方法二:利用系统数字表(高效方案)
如果你的SQL Server环境允许访问master.dbo.spt_values,可以借助这个系统表生成数字序列,再转换为日期,性能比递归CTE更优:
Declare @StartDate Date = '2021-01-01'; Declare @EndDate Date = '2022-10-12'; SELECT DATEADD(DAY, number, @StartDate) AS Date_R FROM master.dbo.spt_values WHERE type = 'P' AND number <= DATEDIFF(DAY, @StartDate, @EndDate) ORDER BY Date_R;
master.dbo.spt_values中type='P'对应正数序列,通过计算起始日期到结束日期的天数差,筛选出对应数量的数字,再通过DATEADD转换为连续日期。
内容的提问来源于stack exchange,提问作者Juan Tamad
相关产品推荐
相关产品推荐

