La función TO_CHAR en PostgreSQL es una herramienta fundamental para convertir valores como fechas, horas o números en cadenas de texto con un formato personalizado. Esta función, parte del grupo de funciones de cadena en PostgreSQL, permite definir patrones específicos para adaptar los datos según las necesidades de visualización, lo que la hace indispensable en reportes, aplicaciones o cualquier consulta que requiera una presentación clara y legible.
Con la función TO_CHAR en PostgreSQL, puedes formatear fechas para mostrar días y meses en texto, incluir separadores de miles en números o ajustar la precisión de los decimales. Su flexibilidad la convierte en una opción poderosa para dar forma a los datos de manera que se adapten a los requisitos específicos de cada proyecto.
En este artículo, primero exploraremos la sintaxis básica de TO_CHAR y luego veremos ejemplos prácticos que te permitirán dominar su uso. Analizaremos sus principales parámetros para que puedas aprovechar todo su potencial en tus consultas y generar formatos personalizados de manera eficiente.
Para más información, puedes consultar la documentación oficial de la función TO_CHAR en PostgreSQL.
Sintaxis
La sintaxis para utilizar la función TO_CHAR en PostgreSQL es la siguiente:
TO_CHAR(expresion, formato)
- expresión: la expresión puede ser una marca de tiempo, un intervalo, un número entero, un valor de doble precisión o un valor numérico que se convierte en cadena según un formato específico.
- formato: qué formato se debe devolver la cadena.
Lista de formatos
La tabla siguiente muestra las cadenas de formato numérico válidas:
Formato | Descripción |
---|---|
9 | Valor numérico con el número de dígitos especificado |
0 | Valor numérico con ceros a la izquierda |
. (period) | punto decimal |
D | punto decimal que utiliza la configuración regional |
, (comma) | grupo (miles) separador |
FM | Modo de relleno, que suprime los espacios en blanco de relleno y los ceros a la izquierda. |
PR | Valor negativo entre paréntesis angulares. |
S | Signo anclado a un número que utiliza la configuración regional |
L | Símbolo de moneda que utiliza la configuración regional |
G | Separador de grupos que utiliza la configuración regional |
MI | Signo menos en la posición especificada para números menores que 0. |
PL | Signo más en la posición especificada para números mayores que 0. |
SG | Signo más / menos en la posición especificada |
RN | Número romano que va del 1 al 3999 |
TH or th | Sufijo del número ordinal en mayúsculas o minúsculas |
La siguiente tabla muestra las cadenas de formato de fecha y hora válidas:
Pattern | Description |
Y,YYY | año en 4 dígitos con coma |
YYYY | año en 4 dígitos |
YYY | 3 últimos dígitos del año |
YY | 2 últimos dígitos del año |
Y | El último dígito del año |
IYYY | Año de numeración de semanas ISO 8601 (4 o más dígitos) |
IYY | 3 últimos dígitos del año de numeración de la semana ISO 8601 |
IY | 2 últimos dígitos del año de numeración de la semana ISO 8601 |
I | Último dígito del año de numeración de la semana ISO 8601 |
BC, bc, AD or ad | Indicador de era sin puntos |
B.C., b.c., A.D. ora.d. | Indicador de época con puntos |
MONTH | Nombre del mes en inglés en mayúsculas |
Month | Nombre del mes en inglés con mayúsculas |
month | Nombre completo del mes en inglés en minúsculas |
MON | Nombre abreviado del mes en mayúsculas, por ejemplo, ENE, FEB, etc. |
Mon | Nombre del mes abreviado en mayúsculas, por ejemplo, enero, febrero, etc. |
mon | Nombre abreviado del mes en minúsculas, por ejemplo, ene, feb, etc. |
MM | Número de mes de 01 a 12 |
DAY | Nombre del día completo en mayúsculas |
Day | Nombre del día completo con la primera letra en mayúsculas |
day | Nombre del día completo en minúsculas |
DY | Nombre abreviado del día en mayúsculas |
Dy | Nombre abreviado del día con la primera letra en mayúsculas |
dy | Nombre abreviado del día en minúsculas |
DDD | Día del año (001-366) |
IDDD | Día del año de numeración 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 | ISO 8601 día de la semana, de lunes (1) a domingo (7) |
W | Semana del mes (1-5) (la primera semana comienza el primer día del mes) |
WW | Número de semana del año (1-53) (la primera semana comienza el primer día del año) |
IW | Número de semana del año de numeración de semanas ISO 8601 (01-53; el primer jueves del año corresponde a la semana 1) |
CC | Siglo: 21, 22, etc. |
J | Día juliano (días enteros desde el 24 de noviembre de 4714 a.C. a medianoche UTC) |
RM | Mes en números romanos en mayúsculas (I-XII) |
rm | Mes en números romanos minúsculas (i-xii) |
HH | Hora del día (0-12) |
HH12 | Hora del día (0-12) |
HH24 | Hora del día (0-23) |
MI | Minuto (0-59) |
SS | Segundo (0-59) |
MS | Milisegundo (000-999) |
US | Microsegundo (000000-999999) |
SSSS | Segundos después de medianoche (0-86399) |
AM, am, PM or pm | Indicador Meridiem (sin puntos) |
A.M., a.m., P.M. or p.m. | Indicador Meridiem (con puntos) |
Ejemplos
Convertir una fecha a cadena
En el siguiente ejemplo, convertimos el campo fecha_alta
, que es de tipo DATE
con formato yyyy-mm-dd
, a una cadena de texto con el formato dd/mm/yy
:
select fecha_alta, to_char(fecha_alta,'dd/mm/yy') from empleados;

Convertir una fecha y hora con zona horaria a cadena
En el siguiente ejemplo, añadimos un día a una fecha y hora con zona horaria utilizando la función TO_CHAR en PostgreSQL junto a DATE_ADD. Posteriormente, convertimos el resultado en una cadena con el formato dd/mm/yyyy
para una presentación más legible:
select to_char(date_add('1986-09-26', '1 day'::interval), 'dd/mm/yyyy');
