Principales respuestas
Suma de Horas y minutos en una Columna de SQL

Pregunta
-
Hola a todos, tengo un cronometro que me guarda el tiempo que se tardan en hacer un proceso con formato 00:00:00 Horas, Minutos y segundos, y todos estos seme guardan en una tabla de SQL pero ocupo primero saber la suma total de esta columna para poder graficarlo pero no se como, ya intente con Select SUM(datepart(hh, myfecha)), SUM(datepart(mi, myfecha)) from #horas pero no me da el formato que busco como este 00:00:00. los datos estan guardados como string. alguna sugerencia para esta suma? se los agradecia mucho.
Saludos.
Pablo G.
Respuestas
-
Hola.
Ya estás muy cerca. Sólo tienes que hacer unas pocas operaciones matemáticas más:
select dias = floor(49590/86400.0), horas = floor((49590%86400)/3600.0), minutos = floor (((49590%86400)%3600.0)/60.0), segundos = (((49590%86400)%3600.0)%60.0)
Aquí indico el valor fijo, tú deberás indicar el resto de la suma que realizas.
Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)- Marcado como respuesta Gustavo LarrieraModerator lunes, 22 de marzo de 2010 16:03
Todas las respuestas
-
Hola.No entiendo muy bien la pregunta, lo mismo no es lo que buscas. Si lo que quieres es sumar tiempos con un SUM, debes primero pasar las fechas a segundos (y sumar) y calcular las diferencias con la función dateadd desde una fecha de referencia (como el 19000101).Como partes de un formato string, tendrás que ir cortando la cadena y multiplicando por 60, nada especialmente complicado. Luego lo sumas, y por último lo conviertes de nuevo a una hora con la función convert.Si no lo logras, nos dices.
Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)- Propuesto como respuesta Alberto López Grande (qwalgrande)Moderator jueves, 11 de marzo de 2010 22:33
-
Como Alberto te comento esta puede ser una solución, quizas muy grande pero la puedes acomodar a tus necesidades:
create table xxx
(campo1 varchar(8))
insert into xxx values ('10:20:30')
insert into xxx values ('01:20:30')
select * from xxx
select sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time, campo1)))*60+ DATEPART(SS, CONVERT(time, campo1)))/60/60 as horas,
(sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time, campo1)))*60+ DATEPART(SS, CONVERT(time, campo1))) - (sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time, campo1)))*60+ DATEPART(SS, CONVERT(time, campo1)))/60/60*60*60))/60 as minutos,
sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time, campo1)))*60+ DATEPART(SS, CONVERT(time, campo1))) - (sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time, campo1)))*60+ DATEPART(SS, CONVERT(time, campo1)))/60/60*60*60) - ((sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time, campo1)))*60+ DATEPART(SS, CONVERT(time, campo1))) - (sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time, campo1)))*60+ DATEPART(SS, CONVERT(time, campo1)))/60/60*60*60))/60*60) as segundos,
sum((DATEPART(hh, CONVERT(time, campo1))*60 + DATEPART(mi, CONVERT(time, campo1)))*60+ DATEPART(SS, CONVERT(time, campo1))) as totalensegundos
from xxx
drop table xxx
Saludos
Juan Carlos
PD. Esto funciona para SQL Server 2008- Editado Juan Carlos Alemán Cuadros viernes, 12 de marzo de 2010 13:55 Agregado PD
- Propuesto como respuesta Roberto Catalán martes, 12 de junio de 2012 5:23
-
-
Compadrito, muchas gracias por la ayuda, intente con el codigo que me pasaron de SQL 2008 y no me funciono por que yo tengo 2005, solo cambie el metodo TIME por DATETIME y me dio resultado pero me dio la suma de horas, minutos y segundos. y yo ocupo la suma total de segundos para despues convertirlos incluso en total de dias,horas y minutos. solo he podido llegar a la suma total de horas y minutos con este codigo que modifique pero como te comento, me faltan aun los dias. Alguna sugerencia? Gracias camarada...
Este es mi codigo:
SELECT SUM((DATEPART(hh, CONVERT(Datetime, Hora)) * 60 + DATEPART(mi, CONVERT(Datetime, Hora))) * 60 + DATEPART(SS, CONVERT(Datetime, Hora)))
AS TotSegundos
FROM TestFechatengo tres datos en una columna varchar 8
10:20:30 01:20:30 02:05:30 -
Hola.
Ya estás muy cerca. Sólo tienes que hacer unas pocas operaciones matemáticas más:
select dias = floor(49590/86400.0), horas = floor((49590%86400)/3600.0), minutos = floor (((49590%86400)%3600.0)/60.0), segundos = (((49590%86400)%3600.0)%60.0)
Aquí indico el valor fijo, tú deberás indicar el resto de la suma que realizas.
Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)- Marcado como respuesta Gustavo LarrieraModerator lunes, 22 de marzo de 2010 16:03
-
Hola.
Ya estás muy cerca. Sólo tienes que hacer unas pocas operaciones matemáticas más:
select dias = floor(49590/86400.0), horas = floor((49590%86400)/3600.0), minutos = floor (((49590%86400)%3600.0)/60.0), segundos = (((49590%86400)%3600.0)%60.0)
Aquí indico el valor fijo, tú deberás indicar el resto de la suma que realizas.
Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)- Propuesto como respuesta Alberto López Grande (qwalgrande)Moderator viernes, 19 de marzo de 2010 22:48
-
Hola.
Ya estás muy cerca. Sólo tienes que hacer unas pocas operaciones matemáticas más:
select dias = floor(49590/86400.0), horas = floor((49590%86400)/3600.0), minutos = floor (((49590%86400)%3600.0)/60.0), segundos = (((49590%86400)%3600.0)%60.0)
Aquí indico el valor fijo, tú deberás indicar el resto de la suma que realizas.
Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
Mil gracias colegas este codigo me Ayudo Mucho... -
Alberto, Excelente respuesta me sirvió mucho.
Comparto mi caso para ver si a alguien le sucede:
Tengo muchos registros de actividades para un mismo tipo de solicitud, y estos registros tienen fecha inicial y fecha final de actividad, necesito entregar informe de Dias Horas Minutos y Segundos por cada Tipo de Solicitud, es decir Sumando todas las diferencias de tiempo de cada actividad para el mismo tipo de solicitud.
SELECT sv.descripcion AS TipoSolicitud, count(distinct tp.workflow) AS Cant_Solicitud,
floor(sum(TIMESTAMPDIFF(SECOND,tp.fecha_inicial,tp.fecha_final))/86400.0) AS Dias,
floor((sum(TIMESTAMPDIFF(SECOND,tp.fecha_inicial,tp.fecha_final))%86400)/3600.0) AS Horas,
floor (((sum(TIMESTAMPDIFF(SECOND,tp.fecha_inicial,tp.fecha_final))%86400)%3600.0)/60.0) AS Minutos,
(((sum(TIMESTAMPDIFF(SECOND,tp.fecha_inicial,tp.fecha_final))%86400)%3600.0)%60.0) AS Segundos,
sum(TIMESTAMPDIFF(SECOND,tp.fecha_inicial,tp.fecha_final)) AS Total_Segundos
FROM xxxxxwhere xxxxx
Gracias.