SQL Server - Como sumar Horas y Minutos

 
Vista:
sin imagen de perfil

Como sumar Horas y Minutos

Publicado por Molitaa (16 intervenciones) el 09/05/2017 23:41:36
Hola, espero me puedan apoyar!!
Quiero sumar el tiempo que obtengo con la siguiente consulta:
1
2
3
4
5
6
7
8
9
SELECT
tiempo =dbo.FormatoFecha(CONVERT(VARCHAR,Dateadd(mi,Datediff(mi,D.FechaSalida,D.FechaLlegada),
										'1900-01-01'),120))
FROM CopCalendario CC
left outer join trfDespacho D ON d.numOperador = cc.NumOperador
WHERE (CC.NumOperador=@NumOperador or @NumOperador=0 )AND
((isnull(D.FechaSalida,0)=0 and isnull(d.FechaLlegada,0)=0) or
D.FechaSalida>=@FechaDesde AND D.FechaLlegada<=DATEADD(DAY, 1, @FechaHasta) )
group by CC.numOperador, FechaSalida, FechaLlegada


tiempo

Quiero sumar 8 hrs con 13 hrs y media y obtenga 21:30

como puedo lograrlo

gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como sumar Horas y Minutos

Publicado por Isaias (4558 intervenciones) el 10/05/2017 00:01:51
1
2
3
4
5
6
7
8
9
10
11
12
13
create table #sumahoras
 (campo1 varchar(8))
truncate table #sumahoras
insert into #sumahoras values ('08:00:00')
insert into #sumahoras values ('13:30:00')
 
select * from #sumahoras
 
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 #sumahoras
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como sumar Horas y Minutos

Publicado por Molitaa (16 intervenciones) el 10/05/2017 00:22:54
gracias por su respuesta Isaias,
habría alguna manera que con lo que yo tengo pueda obtener la suma ya que yo ingreso un numero de operador y me muestra el tiempo laborado sin problemas pero cuando yo le mando el numero 0 para que me muestre a todos los operadores con su tiempo laborado en las fechas indicadas es cuando no me da el resultado correcto.

comparto el código nuevamente porque veo que me falto indicar las fechas una disculpa.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Declare @NumOperador INT , @FechaDesde Datetime, @FechaHasta Datetime
set @NumOperador=0
set @FechaDesde='2017-05-01'
set @FechaHasta='2017-05-31'
 
SELECT
NumOperador= CC.NumOperador,
TiempoLaborado =dbo.FormatoFecha(CONVERT(VARCHAR,Dateadd(mi,Datediff(mi,D.FechaSalida,D.FechaLlegada), '1900-01-01'),120))
FROM CopCalendario CC
left outer join trfDespacho D ON d.numOperador = cc.NumOperador
WHERE (CC.NumOperador=@NumOperador or @NumOperador=0 )AND
((isnull(D.FechaSalida,0)=0 and isnull(d.FechaLlegada,0)=0) or
D.FechaSalida>=@FechaDesde AND D.FechaLlegada<=DATEADD(DAY, 1, @FechaHasta) )
group by CC.numOperador, FechaSalida, FechaLlegada


tiempo

este es mi resultado, yo quiero obtener al empleado con su total de tiempo laborado.

espero a verme explicado.

muchas gracias.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como sumar Horas y Minutos

Publicado por Isaias (4558 intervenciones) el 10/05/2017 17:06:35
¿Que diferencia existe entre el empleado 450142 y el 451073?, quiero identificar porque uno te da valor NULL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como sumar Horas y Minutos

Publicado por Molitaa (16 intervenciones) el 10/05/2017 17:47:24
gracias Isaias, aparece en Null porque no tiene tiempo trabajado en la tabla de trfdespacho, no existe registro, por eso aparece como null.

Los demás si tiene tiempo registro en la otra tabla pero me aparecen en varias renglones, yo quiero hacer la suma del tiempo trabajado del operador y solo mostrar un tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como sumar Horas y Minutos

Publicado por Isaias (4558 intervenciones) el 10/05/2017 18:50:05
De acuerdo, entonces los NULL, es tan sencillo como que incluyas en tu filtro el IS NOT NULL

Y las horas trabajadas, es un simple SUM, agrupando por NumOperador, ¿cierto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como sumar Horas y Minutos

Publicado por Molitaa (16 intervenciones) el 10/05/2017 19:05:01
en este momento coloque el isnull
1
2
3
4
5
6
7
8
NumOperador= CC.NumOperador,
TiempoLaborado =isnull(dbo.FormatoFecha(CONVERT(VARCHAR,Dateadd(mi,Datediff(mi,D.FechaSalida,D.FechaLlegada), '1900-01-01'),120)),0)
FROM CopCalendario CC
left outer join trfDespacho D ON d.numOperador = cc.NumOperador
WHERE (CC.NumOperador=@NumOperador or @NumOperador=0 )AND
((isnull(D.FechaSalida,0)=0 and isnull(d.FechaLlegada,0)=0) or
D.FechaSalida>=@FechaDesde AND D.FechaLlegada<=DATEADD(DAY, 1, @FechaHasta) )
group by CC.numOperador, FechaSalida, FechaLlegada


tiempo

y ya no aparecen Null ahora si ya tengo tiempo Cero 0
ahora me falta sumar los tiempos de cada operador, esa parte como lo puedo lograr?

Coloque un SUM en la linea del TiempoLaborado de la siguiente manera:
1
TiempoLaborado =isnull(dbo.FormatoFecha(CONVERT(VARCHAR,Dateadd(mi,SUM(Datediff(mi,D.FechaSalida,D.FechaLlegada)), '1900-01-01'),120)),0)

pero el resultado no es correcto retire de mi Group by la FechasSalida y mi FechaLegada, el resultado es el siguiente:



resultado

Tendría que obtener 7 - 9 y 21:30
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como sumar Horas y Minutos

Publicado por Isaias (4558 intervenciones) el 10/05/2017 19:13:47
Trabajando un poco sobre tus datos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
drop table #Operador;
 
create table #Operador (operadorid int, hora time(0))
 
insert into #Operador values(451073, '04:00'),
(451073, '03:00'),
(451083, '05:00'),
(451083, '04:00'),
(900200, '08:00'),
(900200, '13:30')
 
-- Total por Segundos
select  operadorid, sum( DATEPART(SECOND, hora) + 60 *
        DATEPART(MINUTE, hora) + 3600 *
        DATEPART(HOUR, hora))
from #Operador
group by operadorid
 
-- Total por Horas
;WITH w(e, mw) AS
(
    SELECT operadorid, SUM(DATEDIFF(MINUTE, '0:00:00', hora))
    FROM dbo.#Operador 
    -- WHERE ...
    GROUP BY operadorid
)
SELECT operadorid = e,
  hora = RTRIM(mw/60) + ':' + RIGHT('0' + RTRIM(mw%60),2)
  FROM w;

operadorid hora
451073 7:00
451083 9:00
900200 21:30
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Como sumar Horas y Minutos

Publicado por Molitaa (16 intervenciones) el 11/05/2017 22:46:40
muchas gracias por dar seguimiento, encontré el detalle en mi consulta, me estaba mandando varios numoperador en lugar de solo uno lo que hice fue crear una tabla temporal para almacenar lo numoperador y luego mandarlos a trfdespacho lo cual hice y me esta arrojando el resultado correcto.

ahora este resultado quiero agregarlo a una consulta que no tiene tabla temporal, como puedo agregarlo para obtener un solo resultado, muestro el código en caso de que me pueda ayudar:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Declare @NumOperador INT , @FechaDesde Datetime, @FechaHasta Datetime
DECLARE @TiempoLaborado NVARCHAR (10), @TiempoNoLaborado NVARCHAR(10)
set @NumOperador=0
set @FechaDesde='2017-05-01'
set @FechaHasta='2017-05-31'
IF OBJECT_ID('tempdb..#tmpOperadores') Is Not Null DROP TABLE #tmpOperadores 
SELECT
distinct NumOperador
INTO #tmpOperadores
FROM CopCalendario
 
SELECT
NumOperador= op.NumOperador,
TiempoLaborado =isnull((dbo.FormatoFecha(CONVERT(VARCHAR,Dateadd(mi,sum(Datediff(mi,D.FechaSalida,D.FechaLlegada)),'1900-01-01'),120))),0)
,TiempoNoLaborado=isnull(dbo.FormatoFecha(CONVERT(VARCHAR,Dateadd(mi,Abs(sum(Datediff(mi,D.FechaSalida,D.FechaLlegada)) - Datediff(mi,@FechaDesde,Isnull(DATEADD(DAY, 1, @FechaHasta),Getdate()))),'1900-01-01'),120)),0)
from #tmpOperadores op
left join trfDespacho d on d.numOperador=op.NumOperador
WHERE (op.NumOperador = @NumOperador OR @NumOperador = 0)
AND ((isnull(D.FechaSalida,0)=0 and isnull(d.FechaLlegada,0)=0) or (D.FechaSalida>=@FechaDesde AND D.FechaLlegada<=DATEADD(DAY, 1, @FechaHasta)))
group by op.NumOperador
 
SELECT CC.NumOperador,
(Nombre + ' ' + ApPaterno + ' ' + ApMaterno) AS Operador,
j.Descripcion,
Incidencias=  isnull(COALESCE(SUM(DATEDIFF(DAY, Fecha_Ini, Fecha_Fin) + 1), 0),0)
FROM trkOperadores O
JOIN trkJornada J  ON J.cveJornada = O.cveJornada
JOIN CopCalendario CC ON CC.NumOperador = O.NumOperador
WHERE O.cveTipoOperador = 2
AND (O.NumOperador = @NumOperador OR @NumOperador = 0)
and ((isnull(Fecha_Ini,0)=0 and isnull(Fecha_Fin,0)=0) or Fecha_Ini >=@FechaDesde and Fecha_Fin <=@FechaHasta)
AND CC.Jornada_Ini>=@FechaDesde and CC.Jornada_Fin<=@FechaHasta
GROUP BY CC.NumOperador,(Nombre + ' ' + ApPaterno + ' ' + ApMaterno), j.Descripcion,  CC.Jornada_Ini
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alex
Val: 3
Ha aumentado su posición en 2 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Como sumar Horas y Minutos

Publicado por Alex (1 intervención) el 03/03/2021 23:57:44
horas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como sumar Horas y Minutos

Publicado por luis (1 intervención) el 10/12/2019 22:06:50
1
DATEADD(HOUR,23,DATEADD(minute,59,DATEADD(SECOND,59,@fecha)))

+23 horas, 59 minutos, 59 segundos

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar