Volver a la página principal
viernes 27 septiembre 2024
10

Cómo concatenar cadenas con delimitador usando CONCAT_WS en SQL Server

¿Qué es CONCAT_WS y para qué se usa?

CONCAT_WS (que significa "Concatenate With Separator") es una función que permite combinar varios valores en una sola cadena, usando un delimitador entre ellos. A diferencia de CONCAT, esta función incluye un delimitador entre cada valor y omite aquellos que son NULL, evitando la necesidad de usar verificaciones adicionales en la consulta. Esta característica facilita la creación de cadenas concatenadas de manera más eficiente y legible.

Los usos típicos de CONCAT_WS incluyen:

  • Combinar nombres, apellidos y otros campos de texto con separadores específicos.
  • Generar listas de valores con delimitadores (;, ,, etc.) para su visualización.
  • Crear cadenas formateadas con valores de diferentes columnas en reportes y aplicaciones.

Sintaxis de CONCAT_WS

CONCAT_WS ( separator, string1, string2, ... )
  • separator: El delimitador que se utilizará entre los valores concatenados (por ejemplo, una coma ,, un guion -, o un espacio).
  • string1, string2, ...: Las cadenas de texto o columnas que se desean concatenar. Se pueden incluir tantos valores como sea necesario.

Ejemplos de uso de CONCAT_WS

Concatenar valores con una coma como delimitador

Supongamos que tienes una tabla Empleados con las columnas Nombre, Apellido y Departamento. Para combinar estas columnas en una sola cadena con comas como delimitador:

SELECT CONCAT_WS(', ', Nombre, Apellido, Departamento) AS EmpleadoInfo
FROM Empleados;

Resultado:

EmpleadoInfo
----------------------
Ana, García, Ventas
Juan, Pérez, Soporte
María, Rodríguez, Desarrollo

Cada columna se une con una coma y un espacio (', ') entre ellas.

Concatenar valores con un guion y omitir NULL

Si algunos valores de las columnas son NULL, CONCAT_WS los ignora automáticamente. Por ejemplo:

SELECT CONCAT_WS('-', Nombre, Apellido, Departamento) AS EmpleadoInfo
FROM Empleados;

Resultado:

EmpleadoInfo
----------------------
Ana-García-Ventas
Juan-Pérez-NULL
María-Rodríguez-Desarrollo

En la fila donde Departamento es NULL, CONCAT_WS omite el valor y evita crear guiones adicionales (Juan-Pérez en lugar de Juan-Pérez-).

Crear una lista de valores de distintas columnas

Para combinar varias columnas en una sola lista con punto y coma (;) como delimitador:

SELECT CONCAT_WS('; ', Telefono, Correo, Direccion) AS Contacto
FROM Empleados;

Resultado:

Contacto
-------------------------------
123456789; ana@mail.com; Madrid
NULL; juan@mail.com; Barcelona
678543210; NULL; Sevilla

Las columnas que son NULL se omiten, creando listas más limpias.

Usar CONCAT_WS con expresiones

Puedes usar CONCAT_WS con expresiones o funciones para generar cadenas más complejas:

SELECT CONCAT_WS(' | ', 'Empleado:', Nombre + ' ' + Apellido, 'ID:', EmpleadoID) AS DetalleEmpleado
FROM Empleados;

Resultado:

DetalleEmpleado
-------------------------------
Empleado: Ana García | ID: 1
Empleado: Juan Pérez | ID: 2
Empleado: María Rodríguez | ID: 3

Aquí se combinan textos fijos (Empleado: y ID:) con los valores de las columnas Nombre, Apellido y EmpleadoID.

Concatenar múltiples columnas con espacios y valores numéricos

Si tienes una tabla Productos con las columnas Nombre, Cantidad y Precio, puedes crear una descripción de productos de la siguiente manera:

SELECT CONCAT_WS(' ', Nombre, 'Cantidad:', CAST(Cantidad AS VARCHAR), 'Precio:', CAST(Precio AS VARCHAR)) AS DescripcionProducto
FROM Productos;

Resultado:

DescripcionProducto
-------------------------------------
ProductoA Cantidad: 10 Precio: 150
ProductoB Cantidad: 5 Precio: 300
ProductoC Cantidad: 20 Precio: 100

Este ejemplo usa CONCAT_WS para crear cadenas descriptivas con etiquetas y valores numéricos.

Consideraciones importantes

  • CONCAT_WS ignora automáticamente los valores NULL y no requiere comprobaciones adicionales, a diferencia de CONCAT.
  • Es compatible a partir de SQL Server 2017, por lo que no está disponible en versiones anteriores.
  • El delimitador (separator) se aplica a cada par de elementos, por lo que no se agrega ni al principio ni al final de la cadena resultante.

Referencia oficial

Para más información sobre CONCAT_WS, consulta la documentación oficial de Microsoft.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer