SQL Server: Cómo Sumar el tipo de dato TIME, How to SUM Data Type TIME using TSQL

| sábado, 8 de agosto de 2015


SQL Server: Cómo Sumar el tipo de dato TIME, How to SUM Data Type TIME using TSQL

Que tal,
El tipo de dato TIME, nuevo desde la versión SQL Server 2008, nos permite almacenar tiempo en nuestra base de datos, por ejemplo horas, anteriormente para hacerlo se debía crear un tipo de dato CHAR(8), pero con este tipo de dato cambia mucho las cosas, pero que sucede si estamos usando este tipo de dato (TIME) y de repente deseamos obtener el tiempo total acumulado, por ejemplo:

DECLARE @TablaTiempo TABLE
(
 IDLocacion int,
 IDMedidor int,
 TiempoProceso time(7)
);

--Ingresamos registros
INSERT INTO @TablaTiempo(IDLocacion, IDMedidor, TiempoProceso)
VALUES
 (1, 50, '08:05:30'),
 (1, 85, '00:05:05'), 
 (2, 36, '01:01:55'),
 (2, 26, '00:00:06'),
 (3, 89, '00:05:15');

--Deseamos saber el tiempo de operación por IDLocacion
SELECT 
 t.IDLocacion,
 SUM(t.TiempoProceso)
  AS TotalTiempoProceso
FROM
 @TablaTiempo t
GROUP BY
 IDLocacion;
 

--Descripción del Error --El tipo de datos time del operando no es válido para el operador sum. --Operand data type time is invalid for sum operator.
Entonces, para poder corregirlo y darle solución debemos de realizar lo siguiente:


SELECT 
 t.IDLocacion,
 CAST(DATEADD(
 ms, 
 SUM(DATEDIFF(ms, '00:00:00.000', t.TiempoProceso)), 
 '00:00:00.000') AS time(7)) 
  AS TotalTiempoProceso
FROM
 @TablaTiempo t
GROUP BY
 IDLocacion;


--Obtenemos los siguientes resultados --IDLocacion TotalTiempoProceso --1 08:10:35.0000000 --2 01:02:01.0000000 --3 00:05:15.0000000
Disfruten!


Saludos!

1 comentarios:

Unknown dijo...

Hola Hebert, buscando una solución para un caso similar, pero yo requiero hacer sumar columnas y no filas, me podrías ayudar

Publicar un comentario