Fechas y horarios en PostgreSQL. Cómo trabajar con ellos

¡Como va esa cuarentena administradores! Nosotros os seguimos ayudando en la medida de lo posible a lidiar con estos días de confinamiento, para que nadie se aburra!! Hoy, vamos a ver cómo trabajar con fechas y horarios en PostgreSQL.

Una actividad común con cualquier base de datos o lenguaje de programación es interactuar con fechas y horas. PostgreSQL tiene varios tipos de datos de fecha y hora, así como funciones adicionales para trabajar con ellos que le facilitarán la vida.

Tipos de datos de fechas y horarios en PostgreSQL

A continuación, os presentamos los diferentes tipos de datos para trabajar con fechas y horarios en PostgreSQL

  • Date: solo fecha (2012-04-25)
  • Time: solo hora (13: 00: 00.00)
  • Timestamp: Fecha y hora (2012-04-25 13: 00: 00.00)
  • Time with Timezone: solo hora (13: 00: 00.00 PST)
  • Timestamp with Timezone:  (2012-04-25 13: 00: 00.00 PST)
  • Interval: un lapso de tiempo (4 días)

El intervalo es una gran utilidad para cuando: necesita consultar en algún rango de tiempo específico.

Formatos de entrada de fechas y horarios en PostgreSQL

PostgreSQL afortunadamente acepta muchas formas de fechas y horas. La documentación de PostgreSQL hace un gran trabajo al documentar estos formatos, en su documentación oficial lo podemos revisar formato de entrada de fecha , formato de entrada de hora y formato de entrada de zona horaria.

A continuación, os mostramos unos ejemplos:

Truncating timestamps.

Hay momentos en los que desea consultar y agrupar por alguna forma truncada de una fecha. PostgreSQL nos ofrece la función  date_trunc. Dado un ejemplo de tabla de usuarios con algunas columnas básicas, puede encontrar registros de usuarios por día con:

SELECT count(*), date_trunc('day', created_at)
FROM users 
GROUP BY 2 
ORDER BY 2 DESC; 

«Ordenar y agrupar por un número como el anterior funciona perfectamente en PostgreSQL. Agrupará y ordenará automáticamente por el número de columna. Aunque no es algo que se deba usar en producción, funciona bien para consultas ad-hoc.«

Intervalos

Los intervalos, como se mencionan a continuación, son una gran herramienta para examinar datos entre dos rangos. De manera similar al ejemplo anterior con truncado, es posible que desee encontrar usuarios que se hayan registrado en las últimas 24 horas. Dado que actualmente no está en una división perfecta de una hora, esto se vuelve un poco más avanzado con lo anterior.

SELECT count(*) 
FROM users 
WHERE created_at >= (now() - '1 day'::INTERVAL); 

Un comando alternativo sería:

SELECT count(*)
FROM users
WHERE created_at >= (now() - interval '1 month'); 

El siguiente ejemplo, sería para calcular la diferencia entre dos fechas.

-- Difference in seconds select date_part('epoch', delivered_at) - date_part('epoch', shipped_at); 
-- or minute, hour, week, day, etc 

También, podremos obtener la diferencia con “Age”.

SELECT age(timestamp 'now()',date(fe_fecha)) as diferencia FROM delivered_at 
trabajar con fechas y horarios en PostgreSQL

Hoy hemos visto cómo tratar con datos de tipo fecha, aplicable a cualquier escenario. Esperamos que os haya sido de utilidad. Nos vemos en una nueva entrega sobre PostgreSQL.

Además, si no quieres perder la siguiente entrega, suscríbete a nuestra newsletter. Con un solo email al mes estarás informado de todas nuestras publicaciones.

Si tienes algún problema con PostgreSQL u otras bases de datos, no dudes en contactarnos sin compromiso.