Cadenas

CONCAT

Une varios valores en una sola cadena, saltándose los NULL.

Sintaxis

CONCAT(<valor1>, <valor2>, …)
CONCAT_WS(<separador>, <valor1>, <valor2>, …)

Convierte los argumentos en texto y los une uno tras otro. A diferencia del operador ||, NULL no «se come» todo el resultado: simplemente se salta. CONCAT_WS pone el separador entre los valores por ti.

Datos para los ejemplos

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

Unir varias partes
SELECT CONCAT('Emma', ' ', 'Wilson') AS full_name;
full_name
Emma Wilson
Una etiqueta para cada empleado
SELECT CONCAT(name, ' (', department, ')') AS label
FROM employees;
label
Emma (backend)
Liam (backend)
Olivia (frontend)
Noah (frontend)
Sophia (design)
CONCAT frente a || cuando hay NULL
SELECT name,
name || ', ' || phone AS with_pipes,
CONCAT(name, ', ', phone) AS with_concat
FROM employees;
namewith_pipeswith_concat
EmmaEmma, +44 7700 900123Emma, +44 7700 900123
LiamNULLLiam,
OliviaOlivia, +44 7700 900456Olivia, +44 7700 900456
NoahNoah, +44 7700 900789Noah, +44 7700 900789
SophiaNULLSophia,

Liam y Sophia no tienen teléfono: || da NULL para toda la cadena, mientras que CONCAT simplemente se salta lo vacío.

Ten en cuenta

CONCAT deja el separador incluso donde no hay valor: CONCAT('Liam', ', ', NULL) da Liam, con una coma al final. Para que el separador vaya solo entre los valores existentes, usa CONCAT_WS(', ', 'Liam', NULL): saldrá solo Liam.

Los números y las fechas se convierten en texto solos, pero el aspecto lo elige PostgreSQL. Si necesitas tu propio formato, como 13.09.2026, usa antes TO_CHAR.

Funciones relacionadas

Más detalles en el curso