relacionada a la respuesta de Tony, también se puede utilizar una sola columna de fecha y hora en relación con una hora de inicio estándar que está implícito para todos los intervalos - por ejemplo: 1/1/1900 12:00 a.m.
En este caso, es bastante fácil para el almacenamiento:
INSERT INTO tbl (interval) VALUES (DATEADD(s, '1/1/1900', DATEDIFF(s, @starttime, @endtime))
Ahora bien, esto no es obviamente fácil para hacer sumas de filas, por lo que podría pensar en añadir persistido columna calculada (s) de DATEDIFF (s, '1/1/1900', intervalo) para proporcionar segundos para realizar SUM.
Ahora, aquí es donde se pone interesante para SQL Server:
Debido a la implementación de SQL Server para convertir números a y desde fechas, 0 -> 1/1/1900 12:00a.m., 0,5 -> 1/1/1900 12:00 PM, 1 -> 1/2/1900 12:00 AM etc., es decir, el número completo se trata como el número de días desde 1/1/1900 y la parte fraccionaria es la fracción dentro del día. Entonces, de hecho, puedes agregar ingenuamente estos para obtener un intervalo.
Y de hecho:
SELECT CONVERT(DATETIME, 1) + CONVERT(DATETIME, 0) + CONVERT(DATETIME, 2) + CONVERT(DATETIME, 0.5)
da '04/01/1900 12: 00: 00.000' como se esperaba
Así que usted puede hacer esto (SUMA dando vueltas por la conversión):
DECLARE @datetest TABLE (dt DATETIME NOT NULL)
INSERT INTO @datetest (dt)
VALUES (0)
INSERT INTO @datetest (dt)
VALUES (1)
INSERT INTO @datetest (dt)
VALUES (2)
INSERT INTO @datetest (dt)
VALUES (0.5)
SELECT *
FROM @datetest
SELECT CONVERT(DATETIME, SUM(CONVERT(FLOAT, dt)))
FROM @datetest
No estoy abogando por hacer esto en general, YMMV, y cualquier solución de diseño que elija debe verificarse con todos sus requisitos.