🧚 ¡Oye! Beekeeper Studio es una GUI de PostgreSQL rápida, moderna y de código abierto Descarga
12 de enero de 2024 Por Matthew Rathbone

En el mundo de las bases de datos SQL, PostgreSQL es conocido por su robustez y su amplio conjunto de funciones. Una de ellas es su sólido soporte para los tipos de fecha y timestamp. En esta guía veremos cómo formatear fechas en PostgreSQL, con ejemplos de código. Este tutorial está dirigido a ingenieros de software y otras personas con perfil técnico que quieran ampliar sus conocimientos de PostgreSQL.

Antes de que sigas leyendo, quería contarte sobre nuestro gestor de bases de datos PostgreSQL moderno y rápido, Beekeeper Studio. Su editor SQL autocompleta mientras escribes y muestra los resultados al instante, así que probar estos formatos de fecha es muy fácil. Además, es gratis para PostgreSQL: descárgalo aquí.

Cómo funcionan las fechas en PostgreSQL

Antes de ver cómo formatear fechas, es fundamental entender cómo se representan en PostgreSQL. PostgreSQL usa el tipo de dato “Date” para guardar la fecha. Así se crea una tabla con una columna DATE.

CREATE TABLE orders (
  order_id serial PRIMARY KEY,
  order_date DATE NOT NULL
);

Ahora, insertemos algunos datos en la tabla orders.

INSERT INTO orders (order_date) VALUES 
('2022-04-01'),
('2022-04-02'),
('2022-04-03');

PostgreSQL es listo y puede interpretar una fecha a partir de un string si la escribes en formato ISO 6801.

Cómo formatear fechas en PostgreSQL: usando la función TO_CHAR

La forma principal de formatear fechas en PostgreSQL es con la función TO_CHAR. TO_CHAR nos permite convertir tipos de fecha/hora en un string con un patrón específico. Así se usa:

TO_CHAR(date, format)

La lista completa de opciones de formato está en la documentación de PostgreSQL. Estas son las opciones de formato vigentes a enero de 2024:

Patrón Descripción
HH hora del día (01–12)
HH12 hora del día (01–12)
HH24 hora del día (00–23)
MI minuto (00–59)
SS segundo (00–59)
MS milisegundo (000–999)
US microsegundo (000000–999999)
FF1 décima de segundo (0–9)
FF2 centésima de segundo (00–99)
FF3 milisegundo (000–999)
FF4 décima de milisegundo (0000–9999)
FF5 centésima de milisegundo (00000–99999)
FF6 microsegundo (000000–999999)
SSSS, SSSSS segundos desde la medianoche (0–86399)
AM, am, PM o pm indicador de meridiano (sin puntos)
A.M., a.m., P.M. o p.m. indicador de meridiano (con puntos)
Y,YYY año (4 o más dígitos) con coma
YYYY año (4 o más dígitos)
YYY últimos 3 dígitos del año
YY últimos 2 dígitos del año
Y último dígito del año
IYYY año con numeración de semanas ISO 8601 (4 o más dígitos)
IYY últimos 3 dígitos del año con numeración de semanas ISO 8601
IY últimos 2 dígitos del año con numeración de semanas ISO 8601
I último dígito del año con numeración de semanas ISO 8601
BC, bc, AD o ad indicador de era (sin puntos)
B.C., b.c., A.D. o a.d. indicador de era (con puntos)
MONTH nombre completo del mes en mayúsculas (rellenado con espacios hasta 9 caracteres)
Month nombre completo del mes con inicial mayúscula (rellenado con espacios hasta 9 caracteres)
month nombre completo del mes en minúsculas (rellenado con espacios hasta 9 caracteres)
MON nombre abreviado del mes en mayúsculas (3 caracteres en inglés, la longitud varía según el idioma)
Mon nombre abreviado del mes con inicial mayúscula (3 caracteres en inglés, la longitud varía según el idioma)
mon nombre abreviado del mes en minúsculas (3 caracteres en inglés, la longitud varía según el idioma)
MM número del mes (01–12)
DAY nombre completo del día en mayúsculas (rellenado con espacios hasta 9 caracteres)
Day nombre completo del día con inicial mayúscula (rellenado con espacios hasta 9 caracteres)
day nombre completo del día en minúsculas (rellenado con espacios hasta 9 caracteres)
DY nombre abreviado del día en mayúsculas (3 caracteres en inglés, la longitud varía según el idioma)
Dy nombre abreviado del día con inicial mayúscula (3 caracteres en inglés, la longitud varía según el idioma)
dy nombre abreviado del día en minúsculas (3 caracteres en inglés, la longitud varía según el idioma)
DDD día del año (001–366)
IDDD día del año con numeración de semanas ISO 8601 (001–371; el día 1 del año es el lunes de la primera semana ISO)
DD día del mes (01–31)
D día de la semana, de domingo (1) a sábado (7)
ID día de la semana ISO 8601, de lunes (1) a domingo (7)
W semana del mes (1–5) (la primera semana empieza el primer día del mes)
WW número de semana del año (1–53) (la primera semana empieza el primer día del año)
IW número de semana del año con numeración de semanas ISO 8601 (01–53; el primer jueves del año está en la semana 1)
CC siglo (2 dígitos) (el siglo XXI empieza el 2001-01-01)
J Fecha juliana (días enteros desde el 24 de noviembre de 4714 a. C. a la medianoche local; consulta la Sección B.7)
Q trimestre
RM mes en números romanos en mayúsculas (I–XII; I=enero)
rm mes en números romanos en minúsculas (i–xii; i=enero)
TZ abreviatura de la zona horaria en mayúsculas (solo en to_char)
tz abreviatura de la zona horaria en minúsculas (solo en to_char)
TZH horas de la zona horaria
TZM minutos de la zona horaria
OF desfase de la zona horaria respecto a UTC (solo en to_char)

Ejemplos de formato de fechas

Empecemos convirtiendo nuestra fecha en un string sencillo y legible. Así se hace:

SELECT order_id, TO_CHAR(order_date, 'DD Mon YYYY') as formatted_date
FROM orders;

El resultado se vería así:

order_id | formatted_date
———+—————-
1 | 13 Jan 2024
2 | 12 Jan 2024
3 | 11 Jan 2024
4 | 10 Jan 2024
5 | 09 Jan 2024

También podemos extraer solo una parte de la fecha:

SELECT order_id, TO_CHAR(order_date, 'Day') as day_of_week
FROM orders;

order_id | day_of_week
———+————-
1 | Friday
2 | Thursday
3 | Wednesday
4 | Tuesday
5 | Monday

Incluso podemos combinar formatos si queremos:

SELECT order_id, TO_CHAR(order_date, 'Day, DD Mon YYYY') as detailed_date
FROM orders;

order_id | detailed_date
———+————————
1 | Friday, 13 Jan 2024
2 | Thursday, 12 Jan 2024
3 | Wednesday, 11 Jan 2024
4 | Tuesday, 10 Jan 2024
5 | Monday, 09 Jan 2024

Función EXTRACT

La función EXTRACT te da acceso fácil a todas las partes posibles de un valor de fecha/hora, como el año, el mes, el día, etc.

SELECT order_id, EXTRACT(MONTH from order_date) as order_month
FROM orders;

order_id | order_month
———+————
1 | 1
2 | 1
3 | 1
4 | 1
5 | 1

Esto es lo básico del formato de fechas en PostgreSQL. Con estas herramientas tendrás una base sólida para manejar datos de fecha. Como todo en programación, la práctica es clave: prueba estos comandos por tu cuenta y ve qué más se te ocurre. ¡Feliz programación!

De verdad deberías probar estas consultas en Beekeeper Studio. :-)

Beekeeper Studio es una GUI de PostgreSQL gratuita y de código abierto

¡Este es el cliente de PostgreSQL que estaba buscando! La interfaz es lo que lo hace diferente: limpia, intuitiva y potente. Adiós al torpe PGAdmin. - David Cyprian

Beekeeper Studio es un cliente de PostgreSQL rápido, intuitivo y fácil de usar. También es compatible con muchísimas otras bases de datos y funciona de maravilla en Windows, Mac y Linux.

La versión de Beekeeper para Linux tiene el 100% de las funciones, sin recortes ni concesiones.

Lo que dicen los usuarios de PostgreSQL sobre Beekeeper Studio

Jay Simons Jay Simons Dueño, Designly.biz

A diferencia de pgAdmin, Beekeeper es increíblemente fácil de usar sin quedarse corto en funciones, ¡y el precio es justo! La función de respaldo de bases de datos es especialmente útil. Simplemente un gran software.

Alex M

Herramienta fabulosa, el IDE más práctico que he encontrado hasta ahora para administrar bases de datos Postgres y MySql: simplemente funciona, sin complicaciones :-)

¿Listo para mejorar tu flujo de trabajo con PostgreSQL?

download Descarga gratis