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

基于Table1所有起始日期生成月度日期序列的SQL需求

为表中所有起始日期生成月度日期序列

我有一张名为table1的表,包含StartDate列,存储了约500个日期值(例如04/02/2023、15/03/2023)。需要为每个起始日期生成一组日期序列:从该起始日期开始每月递增1个月,直到当前月份,同时生成对应的newdates列,计算逻辑为DATEADD(month,1,起始日期-1)。

已实现单个起始日期的递归CTE逻辑,现在需要扩展到表中所有起始日期并合并结果集,解决方案如下:

DECLARE @end AS DATETIME = GETDATE();

WITH months (startdate, newdates)
AS
(
    -- 初始查询:获取table1中所有起始日期,计算每个的第一个newdates
    SELECT 
        StartDate,
        DATEADD(month, 1, DATEADD(day, -1, StartDate)) AS newdates
    FROM table1
    UNION ALL
    -- 递归生成后续月度日期
    SELECT 
        DATEADD(month, 1, startdate),
        DATEADD(month, 1, newdates)
    FROM months
    WHERE DATEADD(month, 1, newdates) <= @end
)
SELECT * FROM months
OPTION (MAXRECURSION 0); -- 解除默认递归深度限制,适配长期序列生成

关键说明

  • 初始CTE直接从table1读取所有起始日期,一次性计算每个日期对应的首个newdates(用DATEADD(day, -1, StartDate)替代起始日期-1,避免隐式转换风险)。
  • 递归逻辑与单个日期的实现一致,对每个已生成的日期继续每月递增,直到newdates的下一个月超过当前日期@end。
  • 添加OPTION (MAXRECURSION 0):SQL Server默认递归深度为100,若部分起始日期需生成超过100条记录(如多年前的日期),该选项可解除限制,避免报错。

执行后,table1中每个起始日期对应的序列会合并返回,格式与单个起始日期的输出示例一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:47:09