Лучший способ, который я могу придумать, - это проанализировать интервалы времени в компонентах часа, минуты, секунды и миллисекунды, преобразовать все это в миллисекунды (путем сложения и умножения), затем сложить их и использовать модули и вычитание, чтобы повернуть его обратно в промежуток времени.
Например
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
Я не проверял все это, и могут быть более простые способы, но я знаю, что это будет работать.