Вычислите СУММУ столбца, который имеет Time DataType:

Я хочу рассчитать сумму поля, которое имеет Time DataType.

Моя таблица ниже:

  TableA:

            TotalTime
          -------------
             12:18:00
             12:18:00

Здесь я хочу суммировать два временных поля. Я попробовал следующий запрос

   SELECT CAST(
              DATEADD(MS, SUM(DATEDIFF(MS, '00:00:00.000', 
                CONVERT(TIME, TotalTime))), '00:00:00.000'
               ) AS TOTALTIME) 
    FROM [TableA]

Но это дает вывод как

            TOTALTIME
        -----------------
         00:36:00.0000000

Но мой желаемый результат будет выглядеть так:

            TOTALTIME
        -----------------
            24:36:00

Как получить этот вывод?

Ответы на вопрос(5)

ПОПРОБУЙ ЭТО.

SELECT 
CONVERT(VARCHAR(MAX),SUM(DATEPART(HH,CAST(YOUR_FIELD AS DATETIME)))+ 
(SUM(DATEPART(MINUTE,CAST(YOUR_FIELD AS DATETIME)))/60) + 
(SUM(DATEPART(MINUTE,CAST(YOUR_FIELD AS DATETIME)))%60 + 
(SUM(DATEPART(SECOND,CAST(YOUR_FIELD AS DATETIME)))/60))/60) + ':' +
RIGHT('00' + CONVERT(VARCHAR(MAX), 
(SUM(DATEPART(MINUTE,CAST(YOUR_FIELD AS DATETIME)))%60+ 
(SUM(DATEPART(SECOND,CAST(YOUR_FIELD AS DATETIME)))/60))%60),2) + ':' +   
RIGHT('00' + CONVERT(VARCHAR(MAX),SUM(DATEPART(SECOND, 
    CAST(YOUR_FIELD AS DATETIME)))%60),2) AS YOUR_FIELD

FROM YOUR_TABLE

Ваш запрос работает нормально, результаты верны,

24:36 - это время 00:36 на следующий день.

Вы можете отобразить максимум 24 часа. Вы не используете ни одного дня, поэтому каждые 24 часа = 0 часов на следующий день.

Просто измените значения столбца, и вы увидите это.

 thevan31 мая 2012 г., 12:35
Да. Я могу понять. Но мне нужно отобразить это как "24: 36". Как это сделать?

Это было бы слишком долго, но если вы хотите избежать смены дня, но вы можете разделить второе ВРЕМЯ на составляющие datepart () и затем добавить их? (даже отображать как varchar, если необходимо, чтобы значение часа превышало 24.

Решение Вопроса

Вы можете суммировать общее количество секунд, илиdatediff(second,0,datecolumn), Вы можете отформатировать это как строку времени с некоторой математикой. Например, общее количество минутtotalseconds / 60 % 60, Например:

select  cast(sum(datediff(second,0,dt))/3600 as varchar(12)) + ':' + 
        right('0' + cast(sum(datediff(second,0,dt))/60%60 as varchar(2)),2) +
        ':' + right('0' + cast(sum(datediff(second,0,dt))%60 as varchar(2)),2)
from    TestTable

Рабочий код на SQL Fiddle.

 thevan31 мая 2012 г., 14:15
да. Спасибо огромное...
 31 мая 2012 г., 14:00
Вы правы,cast('0' + ... Я использовал префикс0 не работал. Исправлен ответ сright('0' + ... сейчас.
 thevan31 мая 2012 г., 12:44
Работает, но проблема в том, что при добавлении времен ('12: 04: 00'), ('12: 05: 00') он дает правильное значение o / p как "24: 09: 00". Но когда мы добавляем («12: 05: 00»), («12: 05: 00»), он дает o / p как «24: 01: 00». Это потому, что в части протокола если мы дадим varchar (3), то он будет отображаться как «24: 010: 00».

24:36 - это то же самое, что 00:36 (следующий день)

 thevan31 мая 2012 г., 12:34
Да. Я могу понять. Но мне нужно отобразить это как "24: 36". Как это сделать?

Ваш ответ на вопрос