计算小时时差时出现意外结果?

时间:2017-02-22 04:48:39

标签: sql-server

当我通过下面的代码计算时差时,它显示了逆序的差异为什么?

declare @startdate time = '08:00:00', @enddate time = '01:00:00'
declare @hour varchar(25),@minutes varchar(25),@seconds varchar(25)

set @hour=datediff(ss,@startdate,@enddate)/60/60%12
set @minutes= datediff(ss,@startdate,@enddate)/60%60 
set @seconds= datediff(ss,@startdate,@enddate)%60

select @hour+':'+@minutes+':'+@seconds

我正在计算12小时的差异。我期待差异是5个小时。但它显示我-7小时。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:3)

默认情况下,sql server采用24小时格式。 您可以指定它是A.M还是P.M。

declare @startdate time = '08:00:00 AM', @enddate time = '01:00:00 PM'
SELECT DATEDIFF(HH,@startdate,@enddate)

如果指定的时间不涉及两个不同的日期,则此方法有效,除非另有说明。 例如:

declare @startdate time = '08:00:00 PM', @enddate time = '01:00:00 PM'
    SELECT DATEDIFF(HH,@startdate,@enddate)

这会导致错误的值,因为@enddate会在下一个日期落下。 为了获得更好的结果,建议指定日期和时间。

select datediff(HH, '02-21-2017 08:00:00 pm'  ,'02-22-2017 01:00:00 PM')

答案 1 :(得分:2)

输出完全正确。 01:00比08:00晚7小时。这就是你获得负数的原因。

你说你用12小时制计算差异。好的,那么你需要以某种方式向SQL Server表明。使用13:00作为结束时间,或使用时间字符串中的AMPM子午线指示符解析日期。

高度建议您只在24小时内处理时间。它将为您带来许多麻烦,让您更容易理解代码。节省时间演示和解析UI层。