SQL Server中两个时间列之间的时差

时间:2018-12-19 13:44:06

标签: sql sql-server tsql datetime time

我在获取sql server中两个时间列之间的分钟差时遇到问题。

Column1: Starttime
Column2: Endtime

这两个类型为nchar(10),我通过以下方式并使用datediff函数将它们转换为时间格式。 如果这两列具有AM格式或PM格式,则分钟差就可以了。但是,如果我的开始时间为PM格式,结束时间为AM(SQL将其作为第二天)格式,那么我得到的分钟数比预期的要短。

select 
    dty_act_start_time,
    dty_act_end_time,
    datediff(minute, convert(varchar,dty_act_start_time,114),convert(varchar,dty_act_end_time,114)) 
from DB.Mydatabase;

请让我知道如何在几分钟内获得正确的差异。

1 个答案:

答案 0 :(得分:3)

如果开始时间大于结束时间,只需加上1440分钟(24小时内的分钟数):

select
    start_time_time,
    end_time_time,
    datediff(minute, start_time_time, end_time_time) + iif(start_time_time <= end_time_time, 0, 1440) as diff
from (
    select
    convert(time(0), dty_act_start_time, 114) as start_time_time,
    convert(time(0), dty_act_end_time, 114) as end_time_time
    from (values
        ('09:00am', '10:00pm'),
        ('10:00pm', '09:00am')
    ) tests(dty_act_start_time, dty_act_end_time)
) x

结果:

start_time_time | end_time_time | diff
09:00:00        | 22:00:00      | 780
22:00:00        | 09:00:00      | 660