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

基于单条记录按条件批量插入多行数据的SQL实现

没问题,我来帮你搞定这个将Table A的日期范围拆分成工作日并批量插入Table B的需求。下面针对不同主流数据库给你具体的实现方案,都是直接能用的代码哦:

核心思路

不管用哪种数据库,核心逻辑都是三步:

  1. 生成每条记录Start_Date到End_Date之间的所有日期
  2. 过滤掉周末(非工作日)
  3. 将符合条件的日期和对应LID插入Table B,每条记录的Start_Date和End_Date都设为当前拆分出的日期

1. SQL Server 实现

用递归CTE生成日期序列,再过滤周末:

WITH DateRange AS (
    SELECT 
        LID,
        Start_Date AS Current_Date,
        End_Date
    FROM TableA
    UNION ALL
    SELECT 
        LID,
        DATEADD(DAY, 1, Current_Date),
        End_Date
    FROM DateRange
    WHERE Current_Date < End_Date
)
INSERT INTO TableB (LID, Start_Date, End_Date)
SELECT 
    LID,
    Current_Date,
    Current_Date
FROM DateRange
WHERE DATEPART(dw, Current_Date) NOT IN (1, 7) -- 注意:英语环境下1=周日,7=周六,其他语言环境可能需要调整
OPTION (MAXRECURSION 0); -- 如果日期跨度超过100天,必须加这个参数取消递归限制

2. MySQL 实现

同样用递归CTE,搭配WEEKDAY()函数判断周末:

WITH RECURSIVE DateRange AS (
    SELECT 
        LID,
        Start_Date AS Current_Date,
        End_Date
    FROM TableA
    UNION ALL
    SELECT 
        LID,
        DATE_ADD(Current_Date, INTERVAL 1 DAY),
        End_Date
    FROM DateRange
    WHERE Current_Date < End_Date
)
INSERT INTO TableB (LID, Start_Date, End_Date)
SELECT 
    LID,
    Current_Date,
    Current_Date
FROM DateRange
WHERE WEEKDAY(Current_Date) NOT IN (5, 6); -- WEEKDAY规则:0=周一,5=周六,6=周日

3. PostgreSQL 实现

PostgreSQL可以直接用generate_series生成日期范围,更简洁:

WITH DateRange AS (
    SELECT 
        a.LID,
        d::DATE AS Current_Date
    FROM TableA a
    CROSS JOIN generate_series(a.Start_Date, a.End_Date, INTERVAL '1 day') d
)
INSERT INTO TableB (LID, Start_Date, End_Date)
SELECT 
    LID,
    Current_Date,
    Current_Date
FROM DateRange
WHERE EXTRACT(DOW FROM Current_Date) NOT IN (0, 6); -- DOW规则:0=周日,6=周六

注意事项

  • 不同数据库的日期函数规则可能有差异,比如判断周末的参数,要根据你的数据库语言环境调整
  • 如果Table A有多条记录,以上代码都能自动批量处理所有记录
  • 确保Table A的Start_Date和End_Date是日期类型,如果是字符串,需要先用CAST()或CONVERT()转换为日期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:12:59