Расчет разницы во времени, когда время пересекает полночь - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь вычислить разницу во времени, когда время пересекает полночь.

(разница между 09:00 и 01:00)

При использовании Microsoft SQL не распознает datetrunc ().

Код, используемый в данный момент datediff(minute, S.Start_, S.End_)/60

Ответы [ 3 ]

1 голос
/ 14 мая 2019

Лучший способ - использовать оба значения в качестве DateTime, тогда вы можете получить реальное значение. В качестве обходного пути вы можете предположить, что если время окончания меньше времени начала, это означает, что оно относится к следующему дню, но онобудет ограничено 23 часами (24, если вы используете <=) </p>

DECLARE @start TIME = '21:00'
DECLARE @end TIME = '01:00' 
SELECT DATEDIFF(HOUR, @start , @end) + CASE WHEN @end < @start THEN 24 ELSE 0 END
0 голосов
/ 14 мая 2019

Просто используйте выражение case:

(case when s.start_ < s.end_
      then datediff(hour, S.Start_, S.End_)
      else datediff(hour, S.End_, s.Start_)
 end)

Деление минут на 60 и игнорирование остатка аналогично подсчету часов.

0 голосов
/ 14 мая 2019

Используйте эту функцию

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...