Получить сумму типов данных СУММА ВРЕМЕНИ (MSSQL08) из таблицы - PullRequest
7 голосов
/ 29 мая 2009

У меня есть следующая таблица типов данных TIME

уточнение: я представляю часы / минуты / секунды видео и хочу выяснить, как долго они будут.

runtime
----------------
01:27:19.0000000
01:26:09.0000000
01:00:56.0000000
01:09:59.0000000
01:25:43.0000000
01:16:01.0000000
01:27:12.0000000
01:22:00.0000000
01:17:47.0000000
01:31:07.0000000
01:36:23.0000000
01:13:29.0000000
01:20:12.0000000
01:03:24.0000000
00:58:42.0000000

Я хочу получить СУММУ всех этих времен.

Ответы [ 3 ]

6 голосов
/ 29 мая 2009

Я еще не много использовал 2008, и у меня нет удобного экземпляра, где я должен это проверить, но что-то вроде этого может работать:

SELECT
     DATEADD(ms, SUM(DATEDIFF(ms, '00:00:00.000', my_time)), '00:00:00.000')
FROM
     dbo.My_Table

Как отмечает le dorfier, добавление времени немного бессмысленно, поскольку предполагается, что оно представляет время суток. Я предполагаю, что вы используете их для обозначения часов / минут / секунд.

О, и я понятия не имею, что произойдет с вышеупомянутым, если оно продлится более 24 часов.

0 голосов
/ 29 мая 2009

некоторые вариации

ВЫБРАТЬ СУММУ (DATEDIFF (МИНУТА, '0:00:00', TimeCol)) ИЗ ТАЙМЕТА

будет работать, но

вам придется нормализовать, вычитая часть даты из каждой даты и времени вам придется конвертировать общее количество минут в время

0 голосов
/ 29 мая 2009

Лучший способ, который я могу придумать, - это проанализировать интервалы времени в компонентах часа, минуты, секунды и миллисекунды, преобразовать все это в миллисекунды (путем сложения и умножения), затем сложить их и использовать модули и вычитание, чтобы повернуть его обратно в промежуток времени.

Например

create function dbo.GetMilliseconds (@timespan varchar (16))
    returns int
as
begin
declare @ms int
declare @seconds int
declare @min int
declare @hour int
set @ms = cast(substring(@timespan, 10, 7) as int)
set @seconds = cast(substring(@timespan, 7, 2) as int)
set @min = cast(substring(@timespan, 4,2) as int)
set @hour = cast(substring(@timespan, 1, 2) as int)
return @ms + (@seconds * 1000) + (@min * 60000) + (@hour * 3600000)
end
go

create function dbo.ParseMilliseconds (@timespan int)
    returns varchar (16)
as
begin
declare @hour int
declare @min int
declare @seconds int
declare @ms int
declare @leftover int
set @hour = @timespan / 3600000 /* this will round down */  
set @leftover = @timespan % 3600000
set @min = @leftover / 60000
set @leftover = @leftover % 60000
set @seconds = @leftover / 1000
set @ms = @leftover % 1000
return 'You''ll have to the string conversion yourself'
end
go

А потом SELECT dbo.ParseMilliseconds(sum(dbo.GetMilliseconds(timespan))) as added_timespan

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

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