viernes, 8 de mayo de 2020

Como obtener la hora ó fecha actual en Firebird

De primeras he de deciros que una de las fuentes de donde he sacado esta documentación ha sido de este link.


En Firebird tenemos varias formas de obtener las fechas y las horas actuales, ellas son:
  • CURRENT_TIMESTAMP
  • CURRENT_DATE
  • CURRENT_TIME
  • ‘NOW’

Con CURRENT_TIMESTAMP se obtienen la fecha y la hora. Por ejemplo:
FECHAHORA01Captura 1. 

Con CURRENT_DATE obtenemos la fecha actual, por ejemplo:
FECHAHORA02
Captura 2. 

Con CURRENT_TIME obtenemos la hora actual, por ejemplo:
FECHAHORA03Captura 3.

Fíjate que la precisión es de segundos, de la forma anterior podemos obtener la hora, los minutos, y los segundos, ¿pero y si necesitamos mayor precisión? Para eso a la variable de contexto CURRENT_TIME le podemos enviar entre paréntesis un número entre 0 y 3, significando la cantidad de decimales que queremos obtener. Por ejemplo:
FECHAHORA04
Captura 4. 

FECHAHORA05
Captura 5.

FECHAHORA06
Captura 6. 

Si observas las capturas 4, 5, y 6 notarás que la cantidad de decimales significativos va aumentando, de acuerdo al parámetro que se le envió a la variable de contexto CURRENT_TIME.
1 = 1 decimal (o sea, una precisión de décimas de segundo)
2= 2 decimales (o sea, una precisión de centésimas de segundo)
3 = 3 decimales (o sea, una precisión de milésimas de segundo)

Con ‘NOW’ podemos obtener la fecha, la hora, o la fecha y hora, actuales. Por ejemplo:
FECHAHORA07
Captura 7. 

FECHAHORA08
Captura 8.

FECHAHORA09
Captura 9.

Como puedes ver, la precisión de la hora con ‘NOW’ siempre es de milisegundos.

Usando las fechas y horas dentro de un stored proceduretrigger o execute block
Si necesitamos utilizar los valores de las fechas u horas actuales dentro del código fuente, entonces podemos obtener sus valores de la misma manera a como lo haríamos con las columnas de las tablas, algo como:
FECHAHORA10
Captura 10. 

Desde luego que también podríamos obtener el valor de ‘NOW’ de la forma anterior.


Diferencias entre CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME y ‘NOW’
Quizás te hayas preguntado ¿para qué existe la palabra ‘NOW’ siendo que las fechas y las horas podemos obtenerlas con las variables de contexto?
Bien, la diferencia es que dentro de un stored proceduretrigger o execute block las variables de contexto siempre devolverán el mismo valor. Por ejemplo, si en la primera línea de un stored procedure la variable de contexto CURRENT_TIME devolvía ’14:24:57′ y ese stored procedure demoró en finalizar 40 segundos, en la última línea de ese stored procedure la variable de contexto CURRENT_TIME seguirá devolviendo ’14:24:57′
No cambió su valor. Dentro de un stored proceduretrigger, o execute block, las variables de contexto siempre tienen exactamente el mismo valor.
Pero ‘NOW’ sí cambia su valor dentro de un stored proceduretrigger o execute block. Y con ‘NOW’ siempre tenemos una precisión de milisegundos.

No hay comentarios:

Publicar un comentario