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

MS SQL Server 2016:如何为指定日期范围的每个日期复制表中所有行

解决方案:为指定日期范围生成每日产品数据

针对MS SQL Server 2016,你可以通过递归CTE生成日期序列,再与产品表做交叉连接的方式实现需求,具体代码如下:

假设你的产品表名为Products,执行以下SQL语句:

-- 定义日期范围参数
DECLARE @StartDate DATE = '2023-01-01';
DECLARE @EndDate DATE = '2023-01-03';

-- 递归CTE生成日期序列
WITH DateRange AS (
    SELECT @StartDate AS Date
    UNION ALL
    SELECT DATEADD(DAY, 1, Date)
    FROM DateRange
    WHERE Date < @EndDate
)

-- 交叉连接产品表,生成每日产品数据
SELECT
    FORMAT(dr.Date, 'dd/MM/yyyy') AS Date,
    p.Product_ID,
    p.Product_Name,
    p.Unit_Price
FROM DateRange dr
CROSS JOIN Products p
ORDER BY dr.Date, p.Product_ID
OPTION (MAXRECURSION 0); -- 解除递归层数限制(默认最多100层,日期范围超过100天需要加这个)

代码说明:

  1. 日期参数定义:通过DECLARE设置起止日期,可根据需求灵活修改。
  2. 递归CTE生成日期:从起始日期开始,每天递增1天,直到达到结束日期。
  3. 交叉连接:将生成的每个日期与产品表的所有行关联,得到每个日期对应的全量产品数据。
  4. 格式处理:用FORMAT函数将日期转为你需要的dd/MM/yyyy格式。
  5. 递归层数限制:OPTION (MAXRECURSION 0)用于支持超过100天的日期范围,SQL Server默认递归层数上限为100。

执行后即可得到你期望的结果:每个日期下都包含所有产品的完整数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 23:27:32