Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sumar Horas DateTime (https://www.clubdelphi.com/foros/showthread.php?t=59504)

sergiojime 29-08-2008 09:49:35

Sumar Horas DateTime
 
Hola, Necesito sumar Campo Hora de una tabla este campo es un DATETIME,
El Caso es que no consigo que me haga la suma correctamente he intentado lo siguiente:
Código SQL [-]
SELECT     IP AS PABX, Fecha, OutTrunkID AS Linea, CONVERT(DATETIME, CONVERT(CHAR(3), 
 SUM(DATEPART(MINUTE, Duration)) / 60 + SUM(DATEPART(HOUR, Duration))) + ':' + 
 CONVERT(CHAR(3), SUM(DATEPART(Minute, Duration)) % 60)) AS Duracion
FROM         dbo.IPOStat
GROUP BY IP, OutTrunkID, Fecha
HAVING      (OutTrunkID <> '')

Pero no me lo suma correctamente :confused:

duilioisola 29-08-2008 12:38:20

- ¿Para qué base de datos es? Quizás haya alguna base de datos que te permita hacerlo con alguna función especial. Con el tema fechas y conversiones de tipo, cada base de datos es un poco especial.

- Dices que no lo hace correctamente. ¿Qué significa eso? ¿Da un error o el resultado no es correcto?

- Por lo que veo estás tratando de convertir formatos, pero no entiendo bien lo que quieres hacer.

¿El resultado que deseas es un número con decimales que te diga cuantas horas ha durado algo? (10 minutos + 50 minutos + 30 minutos = 1,5 horas)

Si es así, supongo que deberías sumar de la siguiente manera:

sum(horas) + sum (minutos) / 60 + sum (segundos) / 3600

- Veo además que utilizas el % para convertir algo de los minutos. ¿Es eso correcto?

Código SQL [-]
CONVERT(DATETIME, 
   CONVERT(CHAR(3),
      SUM(DATEPART(MINUTE, Duration)) / 60 + 
      SUM(DATEPART(HOUR, Duration))) + ':' + 
      CONVERT(CHAR(3), 
         SUM(DATEPART(Minute, Duration)) % 60)) AS Duracion

hecospina 29-08-2008 14:22:11

Hola
No se que motor de base de datos utilizas, pero en firebird, interbase e incluso en paradox puedes utilizar
Código SQL [-]
select extract(year from fecha) as anio, 
extract(month from fecha) as mes, 
extract(day from fecha) as dia,
extract(hour from fecha) as hora,
extract(minute from fecha) as minutos, 
extract(second from fecha) as segundos 
from tabla

la respuesta son enteros y los puedes sumar sin problemas
tambien se puede tomar el dia de la semana extract(weekday from fecha)

Suerte:)

sergiojime 29-08-2008 14:35:31

Bueno, ya lo tengo el motor es sql server 2005, y lo que queria es poder sumer el tiempos que estan en formato DATETIME y que el resultado tb sea un DATETIME. Ej

02:30:20
02:30:00

Resultado : 05:00:20

Al final la consulta correcta es la siguiente, os la pongo asi si os pasa alguna vez podieis hacerlo asi ya que en internet no encontre nada correcto.

Código SQL [-]
SELECT     id, CONVERT(DATETIME, CONVERT(CHAR(3), SUM(DATEPART(MINUTE, fecha)) / 60 + SUM(DATEPART(HOUR, fecha))) + ':' + CONVERT(CHAR(3),
                      SUM(DATEPART(MINUTE, fecha)) % 60) + ':' + CONVERT(CHAR(3), SUM(DATEPART(SECOND, fecha)) % 60)) AS Expr1
FROM         dbo.fechas
GROUP BY id

Bueno espero que os sirva de ayuda:D


La franja horaria es GMT +2. Ahora son las 16:03:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi