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

如何在SSMS中基于日期列生成多行递增日期的新列?

在SSMS中基于日期列生成递增日期列(不超过指定结束日期)

需求说明

原表结构及数据:

IDDate
12022-01-01
22022-03-21

需要生成包含NewCol的新表,NewCol是Date列每月递增的日期,且所有生成的日期必须早于等于@EndDate = '2022-05-31',最终结果如下:

IDDateNewCol
12022-01-012022-02-01
12022-01-012022-03-01
12022-01-012022-04-01
12022-01-012022-05-01
22022-03-212022-04-21
22022-03-212022-05-21

实现方案

用T-SQL的递归CTE(公共表表达式)就能实现,具体代码如下:

DECLARE @EndDate DATE = '2022-05-31';

WITH DateRecursion AS (
    -- 初始行:生成第一个递增月的日期
    SELECT 
        ID,
        Date,
        DATEADD(MONTH, 1, Date) AS NewCol
    FROM YourTable
    WHERE DATEADD(MONTH, 1, Date) <= @EndDate
    UNION ALL
    -- 递归生成后续月份的日期
    SELECT 
        dr.ID,
        dr.Date,
        DATEADD(MONTH, 1, dr.NewCol) AS NewCol
    FROM DateRecursion dr
    WHERE DATEADD(MONTH, 1, dr.NewCol) <= @EndDate
)
SELECT ID, Date, NewCol
FROM DateRecursion
ORDER BY ID, NewCol;

代码解释

  • 锚点成员:从原表取出每一行,计算Date加1个月的日期作为第一个NewCol,同时过滤掉加1个月后超过@EndDate的行,避免生成无效数据。
  • 递归成员:基于上一次生成的NewCol继续加1个月,直到新日期超过@EndDate时停止递归。
  • 最后查询递归CTE的结果,按ID和NewCol排序,就能得到目标格式的表格。

注意:把代码里的YourTable替换成你实际使用的表名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:30:48