当我按以下代码计算时间差时,它显示了反向顺序的差异,为什么?
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
作为结束时间,或用AM
或PM
子午线指示器解析日期。
i 高度建议您仅在24小时内处理时间。它会让您感到许多头痛,并使您更容易理解代码。节省UI层的时间演示和解析。