CONCAT_WS

CONCAT_WS significa Concat With Separator. Concatena cadenas usando un separador definido y, a diferencia de CONCAT, ignora los valores NULL.

Sintaxis

CONCAT_WS(separador, cadena1, cadena2, ..., cadenaN)
  • El primer argumento es el separador
  • Si el separador es NULL, el resultado es NULL
  • Los argumentos NULL se ignoran (no generan resultado NULL)

Ejemplo básico

SELECT CONCAT_WS(', ', 'Manzana', 'Naranja', 'Plátano') AS frutas;
frutas
Manzana, Naranja, Plátano
SELECT CONCAT_WS(' - ', 'MySQL', 'Tutorial', 'Español') AS titulo;
titulo
MySQL - Tutorial - Español

CONCAT_WS ignora NULL

Esta es la ventaja principal sobre CONCAT:

-- CONCAT: NULL contamina todo el resultado
SELECT CONCAT('A', NULL, 'B') AS con_concat;
con_concat
NULL
-- CONCAT_WS: ignora los NULL
SELECT CONCAT_WS(', ', 'A', NULL, 'B') AS con_concat_ws;
con_concat_ws
A, B

Datos de clientes

SELECT CONCAT_WS(' ', nombre, apellidos) AS nombre_completo
FROM clientes
LIMIT 5;
nombre_completo
María García López
Carlos Rodríguez Martín
Laura López Sánchez
Pedro Fernández Castro
Ana Martínez Ruiz

Construir direcciones

SELECT CONCAT_WS(', ', nombre, email, telefono) AS contacto
FROM clientes
LIMIT 3;
contacto
María, maria.garcia@email.com, 612345678
Carlos, carlos.rodriguez@email.com, 623456789
Laura, laura.lopez@email.com, 634567890

Separadores comunes

SELECT
    CONCAT_WS(' | ', nombre, precio, stock) AS con_pipe,
    CONCAT_WS(' / ', nombre, precio) AS con_slash,
    CONCAT_WS(' → ', nombre, precio) AS con_flecha
FROM productos
WHERE id = 1;
con_pipecon_slashcon_flecha
iPhone 15 Pro | 1299.99 | 50iPhone 15 Pro / 1299.99iPhone 15 Pro → 1299.99

Generar CSV

SELECT CONCAT_WS(',', id, nombre, precio, stock) AS linea_csv
FROM productos
LIMIT 3;
linea_csv
1,iPhone 15 Pro,1299.99,50
2,MacBook Air M2,1199.99,30
3,AirPods Pro,249.99,100

CONCAT_WS vs CONCAT

CaracterísticaCONCATCONCAT_WS
SeparadorManual (incluir como argumento)Primer argumento
Comportamiento con NULLDevuelve NULLIgnora el NULL
Uso idealConcatenación simpleListas con separador

En el siguiente artículo veremos LENGTH para obtener la longitud de una cadena.

Escrito por Eduardo Lázaro