Fechas y Horas en Postgres

¿ Quién no ha tenido la necesidad de insertar una fecha y hora en un registro en alguna tabla para fines de auditoria ?

Normalmente en estos casos yo personalmente guardo en cada registro:

  • Quien, cuándo y desde dónde creó el registro
  • Quién, cuándo y desde dónde hizo la última modificación en el registro

Adicional a estos datos, tengo una tabla de bitácora que me guarda información sobre las actividades importantes de los usuarios en el sistema.

Para la parte de los datos de cuando se ha creado o modificado un registro siempre he utilizado timestamp, PostgreSQL acepta los siguientes tipos para el manejo de Fechas:

  • timestamp
  • timestamp with time zone
  • date
  • time
  • time with time zone
  • interval

Para obtener el dato de la hora actual de PostgreSQL se pueden utilizar cualquiera de las sguientes instrucciones:

  • CURRENT_DATE : Fecha Actual
  • CURRENT_TIME : Hora Actual
  • CURRENT_TIMESTAMP : Fecha y Hora Actual
  • LOCALTIME
  • LOCALTIMESTAMP

CURRENT_TIME y CURRENT_TIMESTAMP entregan la fecha y hora actual sin el dato de la zona horario, caso contrario de LOCALTIME y LOCALTIMESTAMP. Cabe decir que es posible agregar un parámetro precision para indicar hasta cuandos dígitos se quiere llegar de resolución. Ademas se puede utilizar NOW() para obtener fecha y hora actuales que en este caso es equivalente a CURRENT_TIMESTAMP.

Fuera de los datos normales fechas y horas tanto con la zona horaria o sin esta, existe el dato interval que básicamente guarda un período de tiempo transcurrido.

PostgreSQL inlcuye un amplio rango de funciones para operar con fechas y horas:

age(timestamp, timestamp): Entrega el tiempo transcurrido entre dos fechas con horario dadas, ejemplo:

Si necesitamos saber cuanto tiempo ha transcurrido desde el día 01 de Enero de 1980 a la fecha podemos utilizar:

SELECT age('1980-01-01 00:00:00','2009-07-08 13:00:00')

Esto nos devolverá algo como:

-29 years -6mons -7days -13:00:00 (esto corresponde al momento en que se estaba publicando esta entrada :D )

Si se omite el segundo parámetro el sistema nos mostrará el tiempo transcurrido desde la fecha especificada hasta la fecha, hora minuto, segundo y milésimas de segundo actuales.

date_part(parámetro, timestamp): Obtiene la parte de la fecha que se especifíque en parámetro, los valores pueden ser:

  • century: Devuelve el siglo de la fecha dada
  • day: Devuelve el día del mes de la fecha dada
  • decade: Devuelve el año divido entre 10
  • dow: Devuelve el número del día de la semana donde Domingo = 0 y Sábado = 6
  • doy: Devuelve el número de día dentro del año especificado
  • epoch: Devuelve el número de segundos para la fecha y hora especificada a partir de 1970-01-01 00:00:00-00
  • hour: Devuelve la hora de la fecha y hora especificada (0-23)
  • microseconds: Devuelve los segundos, incluyendo sus fracciones multiplicados por 1’000,000
  • millenium:  Devuelve el milenio de la fecha y hora especificada
  • milliseconds: Devuelve los segundos, incluyendo sus fracciones multiplicadas por 1,000
  • minute: Devuelve los minutos (0-59)
  • month: Devuelve el número del mes (1-12)
  • quarter: Devuelve el cuatrimestre del año para la fecha especificada (1-4)
  • second: Devuelve el segundo de la fecha dada (0-59)
  • timezone: La zona horaria en UTC
  • timezone_hour: La hora de la zona horaria
  • timezone_minute: El minuto de la zona horaria
  • week: Devuelve el número de la semana dentro de la fecha dada
  • year: Devuelve el número del año dentro de la fecha dada

Espero continuar ampliando esta información próximamente.

Advertisement
  1. Aún no hay trackbacks

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.