none
Como obtener el tiempo transcurrido de varias fechas horas de inicio y fechas horas fin y sumar los tiempos transcurridos en SQL SERVER y C# ASP.NET RRS feed

  • Pregunta

  • Como obtener el tiempo transcurrido de varias fecha hora de inicio y fecha hora fin y sumar los tiempos transcurridos en SQL SERVER y/o C# ASP.NET

    es decir tener una fecha hora inicio y fecha hora fin y obtener este tiempo transcurrido1 .

    tener otra fecha hora inicio y fecha hora fin y obtener este tiempo transcurrido2 .

    después tener otra fecha hora inicio y fecha hora fin y obtener este tiempo transcurrido3.

    ...

    luego tener otra fecha hora inicio y fecha hora fin y obtener este tiempo transcurridoN.

    obtener el total de tiempo transcurrido de todos los tiempos. 

    tiempoTotal=transcurrido1 + transcurrido2 + transcurrido3+...+transcurridoN.

    tiempoTotal en meses,días,horas,minutos,segundos. 

    Les agradezco su ayuda, cuales son sus sugerencias?

    martes, 13 de agosto de 2013 17:07

Respuestas

  • Hola,

         ahora mismo se me ocurre utilizar dateadd para sumarle el total de segundos al 01/01/1900, de la forma dateadd(ss,total_transcurrido,19000101) y a la fecha resultante hacer los diferentes datediff por años, luego meses, luego días, etc... para obtener lo que buscas.


    --
    Saludos,
    Manuel Suarez

    Por favor, marca como propuesta o como respuesta la que haya solucionado tu problema.

    • Marcado como respuesta mike-sm jueves, 15 de agosto de 2013 18:16
    martes, 13 de agosto de 2013 21:35

Todas las respuestas

  • Hola,

       en SQL tienes la función DateDiff, que te calcula la diferencia entre dos fechas, ya sea en años, meses, días, etc... echale un vistazo a este enlace http://msdn.microsoft.com/es-es/library/ms189794(v=sql.105).aspx


    --
    Saludos,
    Manuel Suarez

    Por favor, marca como propuesta o como respuesta la que haya solucionado tu problema.

    martes, 13 de agosto de 2013 18:14
  • Te dejo un ejemplo:

    declare @fechaIni as datetime
    declare @fechaFin as datetime
    declare @fechaRes as datetime
    
    declare @difSegundos as bigint
    
    set @fechaIni = '20130101 00:00'
    set @fechaFin = getdate()
    set @difSegundos = DATEDIFF( SECOND, @fechaIni, @fechaFin )
    set @fechaRes = @fechaFin - @fechaIni 
    
    
    select @fechaIni as fechaIni , @fechaFin as fechaFin
    , @fechaRes as fechaResultado
    --tiempo transcurrido en años, meses, días y en horas:minutos:segundos
    , DATEDIFF( YEAR, '19000101', @fechares ) as anios
    , MONTH( @fechares ) -1 as meses
    , DAY( @fechares ) -1 as dias
    , CAST( @fechaRes AS TIME ) as tiempo

    Sergio Sánchez Arias
    Oaxaca,México
    AYÚDANOS A AYUDARTE

    martes, 13 de agosto de 2013 18:23
  • Esta bien pero como sumo todo ese tiempo transcurrido es decir como sumo los 5,20,150, N tiempos transcurridos para obtener el resultado total? alguna sugerencia? Gracias!
    martes, 13 de agosto de 2013 19:03
  • Como tienes esa información, por columnas o por filas ??? 

    Es un número no determinado de tiempos transcurridos ?


    Sergio Sánchez Arias
    Oaxaca,México
    AYÚDANOS A AYUDARTE

    martes, 13 de agosto de 2013 19:06
  • Si es un numero no determinado de tiempos es decir transcurrido1,transcurrido2,transcurrido3,transcurridoN,.

    necesito sumarlos y obtener el total de segundos, minutos, horas, dias, meses. Lo tengo en columnas, tambien creo que puedo ponerlo en cada columna por segundos, minutos, horas, dias, meses. Alguna sugerencia? Gracias!

     
    martes, 13 de agosto de 2013 19:14
  • Hola,

         Una cosa, el resultado lo quieres desde el SQL o desde la aplicación? como pusiste lo de C#. Entiendo que a priori no conoces el numero de columnas que vas a tener. Si tuvieras cada resultado en una fila, simplemente tendrías que sumar esos valores al estilo:

       select sum(datediff(year,fecha1,fecha2)) as total_transcurrido.

      si los valores los tienes en columnas igual es mejor que devuelvas la fila con todos los valores a la aplicacion y desde alli puedes volcarlo en un array, y recorrerlo sumando todos los campos.


    --
    Saludos,
    Manuel Suarez

    Por favor, marca como propuesta o como respuesta la que haya solucionado tu problema.

    martes, 13 de agosto de 2013 19:49
  • Ok pero como calcular segundos, minutos, horas, dias, meses. puede ser desde SQL SERVER o C# ASP.NET como resulta mas facil, lo importante es que quiero quede. Gracias!
    martes, 13 de agosto de 2013 20:56
  • como calcular segundos, minutos, horas, dias, meses porque aqui me marca todos los segundos es decir alguna forma de ir dividiendo o algo asi los numero para ir convertiendo los segundo luego convierto los minutos, luego horas, etc. alguna operacion que haga esto? 
    esta funcion me arroja todos los segundos o años o minutos de diferencias ya que no me los divide por  segundos, minutos, horas, dias. alguna sugerencia? 

    select sum(datediff(second,fecha1,fecha2)) as total_transcurrido.


    Gracias!

    martes, 13 de agosto de 2013 21:08
  • Hola,

         ahora mismo se me ocurre utilizar dateadd para sumarle el total de segundos al 01/01/1900, de la forma dateadd(ss,total_transcurrido,19000101) y a la fecha resultante hacer los diferentes datediff por años, luego meses, luego días, etc... para obtener lo que buscas.


    --
    Saludos,
    Manuel Suarez

    Por favor, marca como propuesta o como respuesta la que haya solucionado tu problema.

    • Marcado como respuesta mike-sm jueves, 15 de agosto de 2013 18:16
    martes, 13 de agosto de 2013 21:35
  • hola amigo,

    pudiste resolver tu problema, yo estoy en la misma situacion en la que estuviste y me gustaria que me ilustraras, estoy realizando una aplicacion en c# y sql para administrar unas salas de computo de una escuela y necesito controlar el historial de timpos por cada alumno.

    de antemano gracias.

    Saludos cordiales.

    sábado, 1 de marzo de 2014 23:19