correlati alla risposta di Tony, è anche possibile utilizzare una sola colonna datetime rispetto ad un tempo di avvio standard che è implicito per tutti gli intervalli - per esempio: 1/1/1900 12:00 AM.
In questo caso è facile abbastanza per lo stoccaggio:
INSERT INTO tbl (interval) VALUES (DATEADD(s, '1/1/1900', DATEDIFF(s, @starttime, @endtime))
Ora, questo non è ovviamente facile per fare somme di righe, così si potrebbe pensare di aggiungere persistito colonna calcolata (s) di DATEDIFF (s, '1/1/1900', intervallo) per fornire secondi per eseguire SUM.
Ora, qui è dove si fa interessante per SQL Server:
A causa di implementazione di SQL Server per la conversione dei numeri da e per date, 0 -> 1/1/1900 12:00, 0.5 -> 1/1/1900 12:00 PM, 1 -> 1/2/1900 12:00 AM ecc. Ovvero il numero intero viene considerato come il numero di giorni dall'1/1/1900 e la parte frazionaria è la frazione all'interno del giorno. Quindi puoi in realtà ingenuamente aggiungerli per ottenere un intervallo.
E infatti:
SELECT CONVERT(DATETIME, 1) + CONVERT(DATETIME, 0) + CONVERT(DATETIME, 2) + CONVERT(DATETIME, 0.5)
dà '1900/01/04 12: 00: 00.000' come previsto
Così si può fare questo (andare in giro SUM convertendo):
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
Non sto sostenendo di farlo in generale, YMMV, e qualsiasi soluzione di progettazione scelta deve essere verificata rispetto a tutte le vostre esigenze.