none
Suma de Horas y minutos en una Columna de SQL RRS feed

  • 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.
    jueves, 11 de marzo de 2010 22:23

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/)
    viernes, 19 de marzo de 2010 22:48
    Moderador

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/)
    jueves, 11 de marzo de 2010 22:33
    Moderador
  • 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
    viernes, 12 de marzo de 2010 13:54
  • Hola.

    ¿Conseguiste realizar la consulta?

     


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    viernes, 19 de marzo de 2010 18:05
    Moderador
  • 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            TestFecha

    tengo tres datos en una columna varchar 8

    10:20:30
    01:20:30
    02:05:30
      y el resultado que me da son 49590  segundos.  ahora como te comento no se como convertir en mi aplicacion este dato en total de dias horas y minutos

     

    viernes, 19 de marzo de 2010 21:32
  • 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/)
    viernes, 19 de marzo de 2010 22:48
    Moderador
  • 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/)
    viernes, 19 de marzo de 2010 22:48
    Moderador
  • 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...
    jueves, 3 de marzo de 2011 20:21
  • 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 xxxxx

    where xxxxx

    Gracias.

    viernes, 26 de septiembre de 2014 13:59