Вычислить длительность по временам, сохраненным в виде символа (4)

#sql #sql-server #datetime #sql-server-2008 #difference

#sql #sql-сервер #дата и время #sql-server-2008 #разница

Вопрос:

Я пытаюсь рассчитать продолжительность службы, в которой время в таблице хранится как Char (4) HHMM. Например, время начала равно 1402, что будет 14:02, а время окончания равно 1536, что будет 15:36.

Мне нужно, чтобы оно возвращало длительность 94 минуты. Когда я попытался просто преобразовать в числовое значение и вычесть, я получил 134. Я пытался преобразовать во время, но каждый пример, который я пробовал, выдает мне сообщение о типе преобразования.

Комментарии:

1. У вас есть 3 отличных ответа. У меня есть 1 для каждого. Мне любопытно посмотреть, как это происходит. Я предпочитаю одно из решений, но я оставлю свое мнение при себе 🙂

Ответ №1:

Просто преобразуйте значение в a time , а затем используйте DATEDIFF :

 SELECT DATEDIFF(MINUTE, CONVERT(time,STUFF(StartTime,3,0,':')),CONVERT(time,STUFF(EndTime,3,0,':')))
FROM dbo.YourTable;
  

Ответ №2:

Вы можете использовать строковые функции и арифметику:

 select t.*,
    (left(starttime, 2) * 60   right(starttime, 2) - left(endtime, 2) * 60 - left(endtime)) / 60 minutes_diff
from mytable t
  

Это преобразует строки в количество секунд, вычитает значения, а затем преобразует обратно в минуты.

Ответ №3:

Вы можете преобразовать разницу в минуты, а затем добавить ее обратно к нулевому времени:

 select convert(time,
               dateadd(minute,
                       (((et / 100) * 60)   (et % 60)) -  (((st / 100) * 60)   (st % 60)),
                       0)
              )
from (values (1402, 1536)) v(st, et);
  

Вот скрипка db<> .

Ответ №4:

Спасибо всем за ответы, но я нашел свой ответ!

 DateDiff(Minute, try_cast(substring(c.start_time, 1, 2)   ':'   substring(start_time, 3, 2) as time), 
                try_cast(substring(stop_time, 1, 2)   ':'   substring(c.stop_time, 3, 2) as time))
  

Комментарии:

1. Конечно, теперь мы никогда не узнаем! Это больше всего похоже на ответ @Larnu, чем

Ответ №5:

Задача: заданы два параметра в виде символа (4)

  • 1402, 1536 в формате HHMM
  • Возвращает продолжительность в минутах: 15*60 36 — 14*60 02 => 94

Решение:

ВЫБЕРИТЕ (ПРИВЕДЕНИЕ (ПОДСТРОКА (‘1536’, 1,2) КАК int)*60 ПРИВЕДЕНИЕ(ПОДСТРОКА (‘1536’,3,2) КАК int)) — (ПРИВЕДЕНИЕ(ПОДСТРОКА (‘1402’, 1,2) КАК int)*60 ПРИВЕДЕНИЕ(ПОДСТРОКА (‘1402’,3,2) КАК int));