Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Obtener diferencia de fechas en Horas

Estas en el tema de Obtener diferencia de fechas en Horas en el foro de SQL Server en Foros del Web. Hola a todos, tengo un pequeño problema al que no le encuentro una solución precisa, tengo el campo Inicio, Fin y Duracion en la tabla ...
  #1 (permalink)  
Antiguo 09/01/2013, 08:35
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Pregunta Obtener diferencia de fechas en Horas

Hola a todos, tengo un pequeño problema al que no le encuentro una solución precisa, tengo el campo Inicio, Fin y Duracion en la tabla llamada Bitacora. Todos los campos son datetime pero necesito sacar la diferencia entre los campos Inicio y Fin, el problema es que me muestra en la duración la fecha completa con el formato ’01-01-1970 00:00:00’ y solo necesito obtener las horas que hay de diferencia entre el inicio y el fin. Esta es la query que estoy haciendo;

Update Bitacora set Fin = getdate(), Duracion = Incio – getdate() where Duracion is null;

Hago el Update para actualizar el campo fin y allí mismo actualizo el campo duración pero no muestra la diferencia de horas.
  #2 (permalink)  
Antiguo 09/01/2013, 09:56
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Obtener diferencia de fechas en Horas

utiliza la funcion datediff :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 09/01/2013, 11:00
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Obtener diferencia de fechas en Horas

eso intente tambien, de esta forma
Código SQL:
Ver original
  1. SELECT *, duracion = datediff(hh,inicio,fin) FROM bitacora;

el problema es que eso me retorna el total de horas, o el total de minutos o el total de segundos en caso de elegir la opción, pero si los hago por separado me retorna el total y necesito los tres pero unificados. porque si por ejemplo entre las fechas solo hay una hora y media de diferencia el datediff me dice que hay 1 hora, 90 min y 5400 segundos, y eso no me sirve :( porque en ese caso necesito que me guarde el valor de 01:30:00. Habrá alguna opcion del datedif donde pueda poner algo asi?

datediff(hh-mi-ss,inicio,fin)

no se me ocurre nada ya

Última edición por gnzsoloyo; 10/01/2014 a las 08:01
  #4 (permalink)  
Antiguo 09/01/2013, 11:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Obtener diferencia de fechas en Horas

ya no se me ocurre nada......

Código SQL:
Ver original
  1. DECLARE @DATE datetime
  2. SET @DATE=GETDATE()
  3. SET @DATE=dateadd(DD,1,getdate())
  4. SET @DATE=dateadd(mi,25,@DATE)
  5.  
  6.  
  7. SELECT CONVERT(VARCHAR(20),DATEDIFF(mi,getdate(),@DATE)/60) + ':' + CONVERT(VARCHAR(20),DATEDIFF(mi,getdate(),@DATE)%60)

Jugando con los valores de datediff puedes sacar la diferencia de horas y minutos

saludso!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 09/01/2013, 11:39
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Obtener diferencia de fechas en Horas

Gracias libras, sabia que era algo asi pero con tu ejemplo me quedo claro, lo solucione con esto:

Código SQL:
Ver original
  1. SELECT dif = CONVERT(VARCHAR,datediff(hh,inicio,getdate())) + ':' +
  2. CONVERT(VARCHAR,CASE WHEN datediff(hh,inicio,getdate()) > 1 THEN datediff(mi,inicio,getdate()) % 60 ELSE datediff(mi,inicio,getdate()) END) + ':' +
  3. CONVERT(VARCHAR,CASE WHEN datediff(mi,inicio,getdate()) > 1 THEN datediff(ss,inicio,getdate()) % 60 ELSE datediff(ss,inicio,getdate()) END)
  4. FROM bitacora
Muchas gracias :D

Última edición por gnzsoloyo; 10/01/2014 a las 08:01
  #6 (permalink)  
Antiguo 10/01/2013, 08:47
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Obtener diferencia de fechas en Horas

El codigo anterior no me sirvió!
cuando son mas de 60 segundos me muestra igual la cantidad de segundos en ves de la diferencia en formato hh:mm:ss
Pero por fin pude solucionarlo mas simplemente:

Código SQL:
Ver original
  1. UPDATE CGP_Bitacora SET Fin = getdate(), Duracion = ltrim(SUBSTRING(CONVERT( VARCHAR, dateadd(ss, datediff(ss,inicio,getdate()), '19000101'),120),11,11))
  2. WHERE Duracion IS NULL;

agregue los segundos a una fecha X y despues corte el string para mostrar las horas de diferencia y listo.
era muy simple :P
Gracias :)

Última edición por gnzsoloyo; 10/01/2014 a las 08:01
  #7 (permalink)  
Antiguo 10/01/2013, 09:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Obtener diferencia de fechas en Horas

Cita:
Iniciado por leo_acn Ver Mensaje
El codigo anterior no me sirvió!
cuando son mas de 60 segundos me muestra igual la cantidad de segundos en ves de la diferencia en formato hh:mm:ss
Pero por fin pude solucionarlo mas simplemente:
Código SQL:
Ver original
  1. UPDATE CGP_Bitacora SET Fin = getdate(), Duracion = ltrim(SUBSTRING(CONVERT( VARCHAR, dateadd(ss, datediff(ss,inicio,getdate()), '19000101'),120),11,11))
  2. WHERE Duracion IS NULL;

agregue los segundos a una fecha X y despues corte el string para mostrar las horas de diferencia y listo.
era muy simple :P
Gracias :)
Ves no tienes porque rendirte antes de tiempo :) todo tiene solucion, solo es buscarle un poco
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por gnzsoloyo; 10/01/2014 a las 08:01

Etiquetas: diferencia, horas, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:47.