MsSQL   发布时间:2022-05-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了计算SQL Server中的时间差(以分钟为单位)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要两分钟之间的时差.我有如下所示的开始时间和结束时间
start time | End Time    
11:15:00   | 13:15:00    
10:45:00   | 18:59:00

我需要第一行的输出为45,60,15,分别对应于11:15和12:00,12:00和13:00,13:00和13:15之间的时差.

解决方法

以下按预期工作:
SELECT  Diff = CASE DATEDIFF(HOUR,StartTime,EndTimE)
                    WHEN 0 THEN CAST(DATEDIFF(minutE,EndTimE) AS VARCHAR(10))
                    ELSE CAST(60 - DATEPART(minutE,StartTimE) AS VARCHAR(10)) +
                        ReplicatE(',60',DATEDIFF(HOUR,EndTimE) - 1) + 
                        + ',' + CAST(DATEPART(minutE,EndTimE) AS VARCHAR(10))
                END
FROM    (VALUES 
            (CAST('11:15' AS TIME),CAST('13:15' AS TIME)),(CAST('10:45' AS TIME),CAST('18:59' AS TIME)),CAST('11:59' AS TIME))
        ) t (StartTime,EndTimE);

要获得24列,您可以使用24个案例表达式,例如:

SELECT  [0] = CASE WHEN DATEDIFF(HOUR,EndTimE) = 0
                        THEN DATEDIFF(minutE,EndTimE)
                    ELSE 60 - DATEPART(minutE,StartTimE)
                END,[1] = CASE WHEN DATEDIFF(HOUR,EndTimE) = 1 
                        THEN DATEPART(minutE,EndTimE)
                    WHEN DATEDIFF(HOUR,EndTimE) > 1 THEN 60
                END,[2] = CASE WHEN DATEDIFF(HOUR,EndTimE) = 2
                        THEN DATEPART(minutE,EndTimE) > 2 THEN 60
                END -- ETC
FROM    (VALUES 
            (CAST('11:15' AS TIME),EndTimE);

以下内容也有效,并且最终可能会比重复使用相同的case表达式更短:

WITH numbers (number) AS
(   SELECT  ROW_numbER() OVER(ORDER BY t1.N) - 1
    FROM    (VALUES (1),(1),(1)) AS t1 (N)
            CROSS JOIN (VALUES (1),(1)) AS t2 (N)
),YourData AS
(   SELECT  StartTime,EndTime
    FROM    (VALUES 
                (CAST('11:15' AS TIME),(CAST('09:45' AS TIME),CAST('11:59' AS TIME))
            ) AS t (StartTime,EndTimE)
),PivotData AS
(   SELECT  t.StartTime,t.EndTime,n.number,minuteDiff = CASE WHEN n.number = 0 AND DATEDIFF(HOUR,EndTimE) = 0 THEN DATEDIFF(minutE,EndTimE)
                                WHEN n.number = 0 THEN 60 - DATEPART(minutE,StartTimE)
                                WHEN DATEDIFF(HOUR,t.StartTime,t.EndTimE) <= n.number THEN DATEPART(minutE,EndTimE)
                                ELSE 60
                            END
    FROM    YourData AS t
            INNER JOIN numbers AS n
                ON n.number <= DATEDIFF(HOUR,EndTimE)
)
SELECT  *
FROM    PivotData AS d
        PIVOT 
        (   MAX(minuteDiff)
            FOR number IN 
            (   [0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]
            ) 
        ) AS pvt;

它通过连接到24个数字的表来工作,因此不需要重复case表达式,然后使用PIVOT将这24个数字滚动到列中

大佬总结

以上是大佬教程为你收集整理的计算SQL Server中的时间差(以分钟为单位)全部内容,希望文章能够帮你解决计算SQL Server中的时间差(以分钟为单位)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:1560