T-SQL DATEDIFF 在相差只有 45 分钟时给出返回结果 1 小时
T-SQL DATEDIFF giving returning result 1 hours when difference is only 45 minutes
遇到 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”,则 returns 仅 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
更新:
如果有人需要计算两个日期之间的差异,格式为 Day:Hour:Minute
,请在此处发布我的函数
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
要获取值 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
遇到 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”,则 returns 仅 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
更新: 如果有人需要计算两个日期之间的差异,格式为 Day:Hour:Minute
,请在此处发布我的函数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
要获取值 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