计算午夜时分的时差

时间:2019-05-14 04:08:07

标签: sql sql-server

我正在尝试计算穿越午夜的时差。

  

(09:00 pm和01:00 am之间的差异)

使用Microsoft SQL不能识别datetrunc()。

目前使用的代码是 datediff(minute, S.Start_, S.End_)/60

3 个答案:

答案 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,而忽略余数与计算小时数相同。