Principales respuestas
Como obtener el tiempo en Horas y Minutos en un rango de fechas en sql ?

Pregunta
-
Quiero obtener la diferencia entre cada fecha en horas y minutos
Tengo la tabla Despachos con el numoperador - fechasalida - fechallegada como lo muestro en la imagen
numoperador: 900200
Quiero poder obtener el tiempo de diferencia entre cada fecha en horas y minutos, este tiempo cambiara ya que quiero que sea de acuerdo a una fechadesde y fechahasta
Si yo digo que quiero obtener el tiempo que laboro desde el día 17 de enero del 2015 al día 19 de enero del 2015 quiero que me muestre las horas con los minutos sin los segundos solo entre esas fechas.
El código que tengo hasta el momento es:
declare @horas int, @minutos int, @Operador int, @Salida datetime, @llegada datetime SELECT @Operador= D.numOperador, @Salida =D.FechaSalida, @llegada =D.FechaLlegada, @horas= DATEDIFF (Hour, D.FechaSalida, D.FechaLlegada) % 24, --As Horas, @minutos= DATEDIFF (Minute, D.FechaSalida, D.FechaLlegada) % 60-- As Minutos, FROM Operadores O JOIN Calendario CC ON O.NumOperador = CC.NumOperador JOIN Despacho D ON O.NumOperador=D.numOperador WHERE O.cveTipoOperador = 2 AND O.NumOperador = 900200 and D.FechaSalida >='2015-01-17 00:00:00.000' and D.FechaLlegada <='2015-01-18 00:00:00.000' GROUP BY D.NumOperador, D.FechaSalida, D.FechaLlegada select @horas as horas, @minutos as minutos, @Operador as NumOperador, @Salida as Salida,@llegada as LLegada
y lo que obtengo es lo siguiente, solo me regresa el de las primeras fechas, como puedo hacer para que me regrese la suma de las horas del rango de las fechas seleccionadas
gracias
Molitaa
Respuestas
-
Si buscas obtener el total de horas y minutos no puedes mostrar las fechas de entrada y salida al detalle.
SELECT D.numOperador, SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada)) / 60 AS [Horas], SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada)) % 60 AS [Minutos] FROM Operadores O INNER JOIN Calendario CC ON O.NumOperador = CC.NumOperador INNER JOIN Despacho D ON O.NumOperador = D.numOperador WHERE O.cveTipoOperador = 2 AND O.NumOperador = 900200 AND D.FechaSalida>='2015-01-17 00:00:00.000' AND D.FechaLlegada<='2015-01-18 00:00:00.000' GROUP BY D.NumOperador; GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta molitaa viernes, 7 de abril de 2017 21:48
-
si Willams, una disculpa creo que como ya tenía algo de rato con esto me desespere y no lo vi hasta ahora, ya quite las lineas de
, FechaSalida, FechaLlegada al final de la consulta y he obtenido el resultado, agradezco mucho tu apoyo y la paciencia que has tenido.
Lindo Viernes.
Molitaa
- Marcado como respuesta Joyce_ACModerator lunes, 10 de abril de 2017 15:39
Todas las respuestas
-
Si buscas obtener el total de horas y minutos no puedes mostrar las fechas de entrada y salida al detalle.
SELECT D.numOperador, SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada)) / 60 AS [Horas], SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada)) % 60 AS [Minutos] FROM Operadores O INNER JOIN Calendario CC ON O.NumOperador = CC.NumOperador INNER JOIN Despacho D ON O.NumOperador = D.numOperador WHERE O.cveTipoOperador = 2 AND O.NumOperador = 900200 AND D.FechaSalida>='2015-01-17 00:00:00.000' AND D.FechaLlegada<='2015-01-18 00:00:00.000' GROUP BY D.NumOperador; GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta molitaa viernes, 7 de abril de 2017 21:48
-
-
La consulta sumariza los minutos que tiene registrado el operador 900200 en todas sus filas, si buscas un resultado por fila entonces basta con quitar la agrupación y la función de agregado:
SELECT D.numOperador, D.FechaSalida, D.FechaLlegada, DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada) / 60 AS [Horas], DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada) % 60 AS [Minutos] FROM Operadores O INNER JOIN Calendario CC ON O.NumOperador = CC.NumOperador INNER JOIN Despacho D ON O.NumOperador = D.numOperador WHERE O.cveTipoOperador = 2 AND O.NumOperador = 900200 AND D.FechaSalida>='2015-01-17 00:00:00.000' AND D.FechaLlegada<='2015-01-18 00:00:00.000' GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
-
gracias Wiliams, si era la primera forma en que me lo indicaste ya hice pruebas con fechas más actuales y me ha regresado el tiempo correcto.
Tengo sustituido las fechas en donde dice D.FechaSalida y D.FechaLlegada tengo la la fecha fija con el tiempo en cada una voy a colocar @FechaDesde y @Fecha Hasta, pero estoy viendo que si tengo colocado desde el día 10 de Marzo al 11 Marzo me debería de regresar el tiempo de esas fechas y solo me regresa las del día 10 como puedo hacer para que me regrese también las del día 11.
Para que me regrese la suma de las dos fechas del día 10 y 11 tengo que colocar en D.FechaLlegada hasta el día 12
SELECT D.numOperador, SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada)) / 60 AS [Horas], SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada)) % 60 AS [Minutos] FROM Operadores O INNER JOIN Despacho D ON O.NumOperador = D.numOperador WHERE O.NumOperador = 900200 AND D.FechaSalida>='2017-03-10 00:00:00.000' AND D.FechaLlegada<='2017-03-12 00:00:00.000' GROUP BY D.NumOperador; GO
los Resultados que me regresa son
pero en negativos, hay alguna manera de que no me los regrese en negativos ya que me resta el tiempo debería regresar 25 Hrs.
Gracias.
Molitaa
-
Gracias Willams,
Ya puedo ver la fecha con la fechafin muchas gracias.
si fue un error mio la suma, ya que con el código me aparece de la siguiente manera
entonces vi que eran 17 y 8, y lo que hice fue intentar sumar para que me diera el total de las horas.
debe de aparecer en vez de 17, 7 con 59 esto se deberá a como están las fechas guardadas en mi tabla con 18 hrs y no como la del día 10 de marzo.
Molitaa
-
SELECT DATEDIFF(MINUTE, T.FechaLlegada, T.FechaSalida) / 60, DATEDIFF(MINUTE, T.FechaLlegada, T.FechaSalida) % 60 FROM (VALUES ('20170310 01:14:07', '20170310 09:25:43'), ('20170311 01:12:05', '20170311 18:13:39')) T (FechaLlegada, FechaSalida) Horas Minutos ----------- ----------- 8 11 17 1
Considera que el tiempo: 01:12:05 se refiere a la una 1 de la mañana, no a la una (1) de la tarde (13 horas).
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios. -
pues estaba mal yo :s , en la Fecha llegada tenia que llegaba el mismo día a la 1 am entonces ahí tenía que ser día 12 y no día 11 por esta razón me daba en negativos.
Hay alguna manera de que pueda sumar mis dos resultados y dejar uno solo?
que sea 900200 15 horas con 10 minutos?
SELECT D.numOperador, SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada)) / 60 as hora, SUM(DATEDIFF(MINUTE, D.FechaSalida, D.FechaLlegada)) % 60 as minutos FROM Operadores O INNER JOIN Despacho D ON O.NumOperador = D.numOperador WHERE O.NumOperador = 900200 AND D.FechaSalida>='2017-03-10 00:00:00.000' AND D.FechaLlegada<=DATEADD(DAY, 1, '2017-03-12 00:00:00.000') GROUP BY D.NumOperador, FechaSalida, FechaLlegada GO
Molitaa
-
Hay alguna manera de que pueda sumar mis dos resultados y dejar uno solo?
¿No quedo claro la forma de hacerlo en la primera propuesta?. Te recomiendo poner mucho empeño en lo que haces, leer y practicar lo suficiente hasta que entiendas los que realizas.
En el ejemplo que adjuntas únicamente debes agrupar por la columna [NumOperador]
SELECT T.numOperador, SUM(DATEDIFF(MINUTE, T.FechaLlegada, T.FechaSalida) / 60) AS Horas, SUM(DATEDIFF(MINUTE, T.FechaLlegada, T.FechaSalida) % 60) AS Minutos FROM (VALUES ('900200', '20170310 01:14:07', '20170310 09:25:43'), ('900200', '20170311 01:12:05', '20170311 18:13:39')) T (numOperador, FechaLlegada, FechaSalida) GROUP BY T.numOperador; GO numOperador Horas Minutos ----------- ----------- ----------- 900200 25 12 (1 filas afectadas)
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios. -
si Willams, una disculpa creo que como ya tenía algo de rato con esto me desespere y no lo vi hasta ahora, ya quite las lineas de
, FechaSalida, FechaLlegada al final de la consulta y he obtenido el resultado, agradezco mucho tu apoyo y la paciencia que has tenido.
Lindo Viernes.
Molitaa
- Marcado como respuesta Joyce_ACModerator lunes, 10 de abril de 2017 15:39