2016-12-29 4 views
3

я нашел следующую формулу на переполнение стека, который помог мне суммировать значения времени, которая работает блестяще после настройки его немного:SQL Server - время Sum проблема отображения

SELECT CAST(t.TotalHours/3600 AS VARCHAR(2)) + ':' 
    + CAST(t.TotalHours%3600/60 AS VARCHAR(2)) + ':00' 
FROM (SELECT SUM(DATEDIFF(S, '00:00', WorkingHours)) AS TotalHours 
     FROM workhour) t 

из SQL How to sum times from Time datatype columns in hh:mm:ss

Однако У меня теперь есть проблема с точки зрения форматирования. Когда я запускаю этот запрос на моих данных, он возвращает время сумму в следующем формате: HH:M:SS (32:0:00)

Мои данные:

WorkingHours 
    05:30 
    06:00 
    05:30 
    08:00 
    07:00 

Ожидаемый выход:

TotalHours 
    32:00:00 

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

Вопрос: Есть ли способ настроить выше Forumla так, что я могу получить общую для отображения в качестве HH:MM:SS -> 32:00:00

ПРИМЕЧАНИЯ: Это происходит, когда поле минут возвращает 0, или имеет значение менее 10 ...

Благодарим вас за помощь. Я использую Центр данных SQL Server 2016 и храню данные в моей таблице как varchar в формате HH: MM, называемый WorkHours.

Работа Ответ:

SELECT CAST(t.TotalHours/3600 AS VARCHAR(2)) + ':' + 
    RIGHT('000' + CAST (t.TotalHours%3600/60 AS VARCHAR(2)), 2) + ':00' 
FROM (SELECT SUM(DATEDIFF(S, '00:00', TotalHours)) AS TotalHours 
     FROM workhour) t 
+0

Можете ли вы показать свои исходные данные и ожидаемый результат – TheGameiswar

+1

Будьте методическими. Получите часы, минуты и секунды в отдельности, затем соедините их. –

+0

мои данные являются исходными данными из моей таблицы, и ожидаемый результат был добавлен ниже – Crezzer7

ответ

4

Вы можете использовать:

RIGHT('000' + CAST (t.time_sum%3600/60 AS VARCHAR(2)), 2) 

Это займет 2 самых правых символов конкатенации '000' и расчетными минут. Так что, если ваши минуты меньше 10, впереди добавляется 0. Результат: 01 - 60. Я всегда использую больше 0, чем мне понадобится, просто потому, что это не имеет значения, и я всегда буду в безопасности.

+0

получил это, плохо поставил его выше, спасибо за помощь – Crezzer7

+1

@ Crezzer7 просто помню делайте это и в часы. – Stephen