Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-09-2017
solilopi solilopi is offline
Registrado
 
Registrado: sep 2017
Posts: 6
Poder: 0
solilopi Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 10-09-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.838
Poder: 27
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

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

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 10-09-2017
solilopi solilopi is offline
Registrado
 
Registrado: sep 2017
Posts: 6
Poder: 0
solilopi Va por buen camino
Hola, entonces por lo que dices, ¿puedo restar por ejemplo: 02:30:28 y 02:27:42?
Responder Con Cita
  #4  
Antiguo 10-09-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.838
Poder: 27
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 11-09-2017
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 78
Poder: 1
manelb Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 11-09-2017
solilopi solilopi is offline
Registrado
 
Registrado: sep 2017
Posts: 6
Poder: 0
solilopi Va por buen camino
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?
Responder Con Cita
  #7  
Antiguo 11-09-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.838
Poder: 27
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por solilopi Ver Mensaje
..., ¿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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Restar Fechas en Firebird rruffino SQL 3 23-04-2012 20:22:20
restar tiempos Nostradonuts Varios 2 15-04-2011 21:09:48
Existe alguna función en Firebird que me permita restar fechas??? Nelly Varios 1 06-07-2007 22:27:56
Restar tiempos de un timestamp ELINK Firebird e Interbase 3 01-12-2006 12:27:36
Como Restar 2 Fechas en FireBird???? AGAG4 Firebird e Interbase 2 26-12-2005 15:23:49


La franja horaria es GMT +2. Ahora son las 14:47:05.


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