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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:25:31