在计算小时的时间差的同时,结果出乎意料



当我按以下代码计算时间差时,它显示了反向顺序的差异,为什么?

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个小时。有人可以解释吗?

默认情况下,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')

该输出是完全正确的。01:00落后08:00 7小时。这就是为什么您会得到负数。

您说您使用12小时时钟来计算差异。好的,然后您需要以某种方式将其指向SQL Server。在时间字符串中使用13:00作为结束时间,或用AMPM子午线指示器解析日期。

i 高度建议您仅在24小时内处理时间。它会让您感到许多头痛,并使您更容易理解代码。节省UI层的时间演示和解析。

最新更新