SQL Server:根据 datediff 将行拆分为多行

问题描述 投票:0回答:0

我正在努力根据两列之间的

datediff
将一行拆分为多行。例如W 想分行:

随便 开始日期时间 结束日期时间
数据1 2023-03-10 10:00:00 2023-03-14 15:00:00

进入

随便 altstartdatetime altenddatetime
数据1 2023-03-10 10:00:00 2023-03-10 23:59:59
数据1 2023-03-11 00:00:00 2023-03-11 23:59:59
数据1 2023-03-12 00:00:00 2023-03-12 23:59:59
数据1 2023-03-13 00:00:00 2023-03-13 23:59:59
数据1 2023-03-14 00:00:00 2023-03-14 15:00:00

目前我已经实现了日期不重叠,代码重叠1天的案例:

SELECT        
    [whatever], [startdatetime] AS altstartdatetime, 
    CAST([startdatetime] AS time) AS altstarttime, 
    CASE 
        WHEN DATEDIFF(day, [startdatetime], [enddatetime]) > 0 
            THEN CAST(CONVERT(varchar, CONVERT(date, [startdatetime])) + ' 23:59:59' AS datetime) 
            ELSE [enddatetime] 
    END AS altenddatetime, 
    CASE 
        WHEN DATEDIFF(day, [startdatetime], [enddatetime]) > 0 
            THEN CAST('23:59:59' AS time) 
            ELSE CAST([enddatetime] AS time) 
    END AS altendtime
FROM 
    [somewhere]

UNION ALL

SELECT        
    [whatever], 
    CASE 
        WHEN DATEDIFF(day, [startdatetime], [enddatetime]) = 1 
            THEN CAST(CONVERT(varchar, CONVERT(date, enddatetime)) + ' 00:00:00' AS datetime) 
    END AS altstartdatetime, 
    CAST('00:00:00' AS time) AS altstarttime, [enddatetime] AS altenddatetime, 
    CAST([enddatetime] AS time) AS altendtime,
FROM
    [somewhere]
WHERE        
    DATEDIFF(day, [startdatetime], [enddatetime]) = 1

如何包括带有

datediff > 1
的案例?

提前致谢。

sql-server union overlap datediff cross-apply
© www.soinside.com 2019 - 2024. All rights reserved.