当差异仅为45分钟时,T-SQL DATEDIFF返回结果1小时

时间:2018-02-05 16:07:02

标签: sql sql-server tsql datediff

面对T-sql Datediff功能的问题, 我计算两个日期之间的分钟日期差异,然后是几小时。

分钟给我正确的结果

SELECT DATEDIFF(minute,'2018-01-22 23:59:00.000','2018-01-23 00:44:00.000')
Result 45 minutes

但是,当我试图计算小时时,它会给我不正确的结果,几天结束,新的一天开始, 因此,如果时间参数为'23:59:00'且第二个参数为'00:44:00',则仅在45分钟时返回1小时差异。

SELECT DATEDIFF(HOUR,'2018-01-22 23:59:00.000','2018-01-23 00:44:00.000')
Result 1 Hour --Incorrect

我期待这个结果为零

SELECT DATEDIFF(HOUR,'2018-01-22 23:59:00.000','2018-01-23 00:44:00.000')
Result 0 Hour -- This is the result expected

更新 如果有人需要以格式日:小时:分钟

计算两个日期之间的差异,请在此处发布我的函数
ALTER FUNCTION [dbo].[UDF_Fedex_CalculateDeliveryOverdue] 
(
    -- Add the parameters for the function here
    @requiredDate VARCHAR(50), 
    @deliveryStamp VARCHAR(50)
)
RETURNS VARCHAR(25)
AS
BEGIN

DECLARE @ResultVar VARCHAR(25)

 SET @ResultVar = ( SELECT CASE WHEN a.Days = 0 AND a.Hours = 0 THEN CAST(a.Minutes AS VARCHAR(10)) + ' Minutes'
                                WHEN a.Days = 0  THEN CAST(a.Hours AS VARCHAR(10)) + ' Hours ' + CAST(a.Minutes AS VARCHAR(10)) + ' Minutes'
                                ELSE CAST(a.Days AS VARCHAR(10)) +' Day ' + CAST(a.Hours AS VARCHAR(10)) +' Hours ' + CAST(a.Minutes AS VARCHAR(10)) + ' Minutes'

                                    END 

FROM ( SELECT DATEDIFF(hh, @requiredDate,@deliveryStamp)/24 AS 'Days'
        ,(DATEDIFF(MI, @requiredDate,@deliveryStamp)/60) - 
        (DATEDIFF(hh, @requiredDate,@deliveryStamp)/24)*24 AS 'Hours'
        ,DATEDIFF(mi, @requiredDate,@deliveryStamp) - 
        (DATEDIFF(mi, @requiredDate,@deliveryStamp)/60)*60 AS 'Minutes'
        ) a)
    -- Return the result of the function

    RETURN @ResultVar
END

1 个答案:

答案 0 :(得分:2)

要获得值0,您需要在几分钟内得到结果,然后转换为小时:

SELECT DATEDIFF(minute,'2018-01-22 23:59:00.000','2018-01-23 00:44:00.000')/60

更精确:

SELECT DATEDIFF(minute,'2018-01-22 23:59:00.000','2018-01-23 00:44:00.000')/60.0