我在获取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;
请让我知道如何在几分钟内获得正确的差异。
答案 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