Сумма времени в sql - PullRequest
       3

Сумма времени в sql

0 голосов
/ 05 июля 2011

У меня есть такая таблица ...

create table test
(
  dt datetime
)

В этой таблице дата и время следующие:

2011/02/02 12:55:00
2011/03/05 00:40:00
2011/02/03 00:12:00

Я хочу вычислить сумму часов, ми, сс

В одном запросе выбора не SP.

Если кто-нибудь знает, пожалуйста, сообщите мне.

Спасибо ...

Ответы [ 3 ]

2 голосов
/ 05 июля 2011

Вы можете суммировать время в секундах, а затем конвертировать в часы, минуты и секунды:

select TotalSeconds / 3600 as [Hours], (TotalSeconds % 3600) / 60 as [Minutes], (TotalSeconds % 3600) % 60 as [Seconds]
from
(
    select sum(datepart(hour, dt) * 3600) + sum(datepart(minute, dt) * 60) + sum(datepart(second, dt)) as TotalSeconds
    from test
) t
1 голос
/ 06 июля 2011
Declare @Table Table 
(
    DateTimeCol DateTime
)
insert into @Table values ( '2011/02/02 12:55:00')
insert into @Table values ('2011/03/05 00:40:00')
insert into @Table values ('2011/02/03 00:12:00')

;with CTE As
(
    --first of all find total seconds of datecolumn
    --sum all seconds
    Select SUM(
        (datepart(hour,DateTimeCol)*60*60)+(datepart(minute,DateTimeCol)*60)+(datepart(second,DateTimeCol))
    ) As TotalSecond    
    From @Table
)
--devides with 3600 to get the total hours and then to 60 to get total minutes
Select CONVERT(VARCHAR(10),TotalSecond/3600)+ '.' + 
CONVERT(VARCHAR(20),TotalSecond%3600/60) + '.' + 
CONVERT(VARCHAR(20),TotalSecond%3600%60) AS [Time] --Total of Time
From CTE 
1 голос
/ 05 июля 2011

При условии, что сумма не будет превышать 999 часов:

DECLARE @t TABLE(dt DATETIME);

INSERT @t SELECT '20110202 12:55'
    UNION SELECT '20110305 00:40'
    UNION SELECT '20110203 00:12';

WITH s AS
(
    SELECT s = SUM(DATEDIFF(SECOND, 
        DATEADD(DAY, 0, DATEDIFF(DAY, 0, dt)), dt))
    FROM @t
)
SELECT 
    s,
    hhmmss = RIGHT('000' + RTRIM(s/3600), 3)
     + ':' + RIGHT('00' + RTRIM((s % 3600) / 60), 2)
     + ':' + RIGHT('00' + RTRIM((s % 3600) % 60), 2)
FROM s;

Однако, если то, что вы на самом деле храните, это длительность, почему бы не сохранить количество секунд вместо того, чтобы вклинивать ваши данные в неподходящий тип данных, для которого требуются все виды обходных путей для правильной обработки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...