我正在尝试计算穿越午夜的时差。
(09:00 pm和01:00 am之间的差异)
使用Microsoft SQL不能识别datetrunc()。
目前使用的代码是
datediff(minute, S.Start_, S.End_)/60
答案 0 :(得分:1)
最好的方法是将两个值都设为DateTime,然后可以获取真实值,作为一种变通办法,可以假设如果结束时间小于开始时间,则表示它指向第二天,但是将被限制为23小时(如果使用<=,则为24小时)
DECLARE @start TIME = '21:00'
DECLARE @end TIME = '01:00'
SELECT DATEDIFF(HOUR, @start , @end) + CASE WHEN @end < @start THEN 24 ELSE 0 END
答案 1 :(得分:0)
使用此功能
create function fn_MinuteDiff(@Start time, @End time)
returns int
as
begin
if @End<@Start
begin
return 1440 - datediff(minute,@End, @Start)
end
return datediff(minute, @Start, @End)
end
然后在您的选择语句中调用它
select dbo.fn_MinuteDiff (cast('9:00pm' as time), cast('1:00am' as time))
答案 2 :(得分:0)
只需使用case
表达式:
(case when s.start_ < s.end_
then datediff(hour, S.Start_, S.End_)
else datediff(hour, S.End_, s.Start_)
end)
将分钟数除以60,而忽略余数与计算小时数相同。