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)
-   -   Resta de Campos timestamp (https://www.clubdelphi.com/foros/showthread.php?t=74548)

amerika111 24-06-2011 21:00:20

Resta de Campos timestamp
 
Hola que tal, mi pregunta es la siguiente, existe alguna funcion en firebird que me permita restar dos campos tipo timestamp

hora_entrada y hora_salida

amerika111 24-06-2011 21:04:13

Cita:

Empezado por amerika111 (Mensaje 404756)
Hola que tal, mi pregunta es la siguiente, existe alguna funcion en firebird que me permita restar dos campos tipo timestamp

hora_entrada y hora_salida

He tratado de usar datediff pero no lo reconoce como funcion....

Casimiro Notevi 24-06-2011 21:21:53

Código SQL [-]
horaentrada - horasalida

Simplemente :)

amerika111 24-06-2011 21:24:47

Cita:

Empezado por Casimiro Notevi (Mensaje 404763)
Código SQL [-]horaentrada - horasalida



Simplemente :)


lo he utilizado de esa manera y el resultado es el siguiente

-0.3264

teniendo en cada campo respectivamente
hora_entrada 1899-12-30 08:00:00 a.m.
hora_salidada 1899-12-30 03:50:00 p.m.

ecfisa 24-06-2011 21:28:11

Hola.

Esta sentencia resta dos campos TIMESTAMP y te devuelve el resultado en segundos.

Código SQL [-]
SELECT CAST(HORA_SALIDA AS TIME) - CAST(HORA_ENTRADA AS TIME) AS RESTA FROM HORARIOS
Pero no sé si es lo que buscas...

Saludos.

amerika111 24-06-2011 21:32:26

Cita:

Empezado por ecfisa (Mensaje 404765)
Hola.

Esta sentencia resta dos campos TIMESTAMP y te devuelve el resultado en segundos.


Código SQL [-]
SELECT CAST(HORA_SALIDA AS TIME) - CAST(HORA_ENTRADA AS TIME) AS RESTA FROM HORARIOS




Pero no sé si es lo que buscas...

Saludos.

Utilizandolo de esa manera arroja un resultado de 28,200.0000
esos me indicas que son segundo.. para poder convertirlo a horas, lo que necesito seria saber cuantas horas hay entre la entrada y salida

Casimiro Notevi 24-06-2011 21:38:04

Los campos de tipo timestamp son realmente double, la parte entera corresponde a los días pasados desde el 15.12.1899 creo recordar y la parte decimal es la hora.

guillotmarc 24-06-2011 21:38:18

Hola.

Teniendo en cuenta que cada día es una unidad entera, entonces si quieres calcular la diferencia en horas entre dos timestamps, solo tienes que multiplicar el resultado por 24 (24 horas por día).

Es decir, si no te he entendido mal, esta es la consulta que quieres :

(horaentrada - horasalida) * 24

Saludos.

amerika111 24-06-2011 21:48:41

Cita:

Empezado por Casimiro Notevi (Mensaje 404769)
Los campos de tipo timestamp son realmente double, la parte entera corresponde a los días pasados desde el 15.12.1899 creo recordar y la parte decimal es la hora.


lo que pasa que lo que se ingresa en esos campos es nada mas la hora y la fecha como es nula por default se coloca la 15.12.1899


pero ya con esto ya me convierte los segundos a horas

Código SQL [-]
SELECT  ((CAST(LUN_SALIDA AS TIME) - CAST(LUN_ENTREDA AS TIME)))/3600 AS RESTA FROM A_PRENOMINAS WHERE ID=1

Casimiro Notevi 24-06-2011 21:52:40

Cita:

Empezado por amerika111 (Mensaje 404772)
lo que pasa que lo que se ingresa en esos campos es nada mas la hora y la fecha como es nula por default se coloca la 15.12.1899

Claro, por eso siempre tendrá un 0,xxxxxxxxx

Si usas el dialecto 3 entonces podrás usar campos date, time o timestamp indistintamente.

maeyanes 24-06-2011 21:54:10

Hola...

Si estás usando solo el tiempo, ¿por qué usas campos Timestamp? Lo mejor sería que uses campos Time y así no te preocupas por la parte de la fecha.


Saludos...

guillotmarc 25-06-2011 19:38:36

Cita:

Empezado por amerika111 (Mensaje 404772)
pero ya con esto ya me convierte los segundos a horas

Código SQL [-]
SELECT  ((CAST(LUN_SALIDA AS TIME) - CAST(LUN_ENTREDA AS TIME)))/3600 AS RESTA FROM A_PRENOMINAS WHERE ID=1

Anteriormente ya te indiqué una solución mucho más simple :

Código SQL [-]
SELECT (LUN_SALIDA - LUN_ENTREDA) * 24 AS RESTA FROM A_PRENOMINAS WHERE ID=1

La parte decimal del Timestamp representa la hora como fracción del día, por tanto solo tienes que multiplicarlo por 24 para reflejarlo en horas.

Saludos.


La franja horaria es GMT +2. Ahora son las 03:36:38.

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