Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Restar tiempos en Firebird (https://www.clubdelphi.com/foros/showthread.php?t=92262)

solilopi 10-09-2017 17:41:47

Restar tiempos en Firebird
 
Hola de nuevo, necesito restar los valores de dos campos del tipo time. En MySQL está la función TIMEDIFF pero en Firebird no. ¿Alguien puede ayudarme? Gracias.

ecfisa 10-09-2017 18:28:07

Hola.

Podes usar la función DATEDIFF especificando la unidad de tiempo en que desees el resultado.

Saludos :)

solilopi 10-09-2017 19:34:37

Hola, entonces por lo que dices, ¿puedo restar por ejemplo: 02:30:28 y 02:27:42?

ecfisa 10-09-2017 20:29:57

Hola.

Así es.

Un ejemplo con los valores que mencionas:
Código SQL [-]
SELECT
 DATEDIFF(SECOND, CAST('02:30:28' AS TIME), CAST('02:27:42' AS TIME))
FROM RDB$DATABASE
que te da la diferencia en segundos entre los dos valores.

En este caso claramente obtendremos un resultado negativo, pero si lo necesitas, podrás aplicar la función ABS() para obtener el valor absoluto.

Saludos :)

manelb 11-09-2017 10:29:28

Hace unos días ya estuvimos hablando sobre fechas en el siguiente hilo:

https://www.clubdelphi.com/foros/showthread.php?t=92234

Ahora me surge también a mi una duda...

En la función DATEDIFF, el primer parámetro indica la unidad de respuesta de la función(segundos, minutos, días...).
En el caso de que se necesite una respuesta del tipo "hh:mm:ss", podria realizarse de forma directa con alguna función??

En su día tuve que realizar una consulta donde se devolviera el tiempo transcurrido entre dos fechas con el siguiente formato y tuve que montar un sp para calcular-lo.

solilopi 11-09-2017 14:58:19

Gracias, solucionado, la Query queda:
Código:

SELECT datediff(minute,CAST(MIN(a.tiempo)AS time), cast(MAX(a.tiempo)AS time)) as diferencia, a.recorrido FROM datos a WHERE a.recorrido = 'recorrido' GROUP BY a.RECORRIDO
Aunque la pregunta de manelb me parece muy interesante, ¿Se podría devolver en formato hh:mm:ss?

ecfisa 11-09-2017 20:07:35

Hola.
Cita:

Empezado por solilopi (Mensaje 520988)
..., ¿Se podría devolver en formato hh:mm:ss?

Código SQL [-]
SELECT
  (DATEDIFF(SECOND, CAST(T1 AS TIME), CAST(T2 AS TIME)) / 3600) || ':' ||
  (MOD(DATEDIFF(SECOND, CAST(T1 AS TIME), CAST(T2 AS TIME)), 3600) / 60) || ':' ||
   MOD(DATEDIFF(SECOND, CAST(T1 AS TIME), CAST(T2 AS TIME)), 60)
FROM LATABLA

Saludos :)


La franja horaria es GMT +2. Ahora son las 19:45:07.

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