¿Cómo unir o concatenar dos o más columnas separadas por un espacio en SQL con CONCAT_WS?
En este tutorial, aprenderá a usar la función CONCAT_WS() de SQL Server para unir varias cadenas junto con un separador, esta función solo esta disponible en SQL Server 2017 en adelante.
Descripción general de la función CONCAT_WS() de SQL Server
La función CONCAT_WS() de SQL Server concatena dos o más cadenas en una cadena con un separador. CONCAT_WS() significa concatenar con separador.
A continuación, se muestra la sintaxis de la función CONCAT_WS():
CONCAT_WS(separator,input_string1,input_string2,[...input_stringN]);
En esta sintaxis podemos ver lo siguiente:
- separator es una expresión basada en caracteres que evalúa cualquier carácter del tipo
CHAR,NCHAR, VARCHAR oNVARCHAR. - input_string1 a input_stringN son expresiones de cualquier tipo. La función
CONCAT_WS()convierte implícitamente valores de tipo sin carácter a tipo de carácter antes de la concatenación.
La función CONCAT_WS() une las cadenas de entrada en una sola cadena. Separa esas cadenas concatenadas con el separador especificado en el primer argumento.
Tenga en cuenta que CONCAT_WS() requiere al menos dos cadenas de entrada. Significa que, si pasa cero o un argumento de cadena de entrada, la función generará un error.
La función CONCAT_WS() los valores NULL los toma como una cadena vacía de tipo VARCHAR(1). Tampoco agrega el separador entre NULL. Por lo tanto, la función CONCAT_WS() puede unir cadenas que pueden tener valores en blanco.
SQL Server CONCAT_WS() ejemplos de funciones
Veamos algunos ejemplos del uso de la función CONCAT_WS().
A) Usar CONCAT_WS() para unir cadenas literales con un separador
El siguiente ejemplo utiliza la función CONCAT_WS() para unir dos cadenas literales en una. Separa dos valores concatenados usando un espacio:
SELECT
CONCAT_WS(' ', 'Estrada', 'Web') full_name
Resultado:
full_name
---------
Estrada Web
(1 row affected)
B) Usando CONCAT_WS() con columnas de tabla
La siguiente instrucción usa la función CONCAT_WS() para unir valores en las columnas last_name y first_name de la tabla sales.customers de la base de datos de ejemplo. Separa el apellido y el nombre por una coma(,) y espacio:
SELECT
first_name,
last_name,
CONCAT_WS(', ', last_name, first_name) full_name
FROM
sales.customers
ORDER BY
first_name,
last_name;
La siguiente imagen muestra el resultado parcial:

C) Usando CONCAT_WS() con NULL
La siguiente declaración demuestra cómo la función CONCAT_WS) maneja las cadenas de entrada que tienen valores NULL:
SELECT
CONCAT_WS(',', 1, 2, NULL, NULL, 3);
Resultado:
result
----------------------------------------
1,2,3
(1 row affected)
Como se puede ver claramente en la salida, la función CONCAT_WS() ignora los NULL y no agrega el separador entre los valores NULL.
El siguiente ejemplo concatena los datos del cliente para formatear las direcciones del cliente. Si un cliente no tiene un número de teléfono, la función simplemente lo ignora:
SELECT
CONCAT_WS
(
CHAR(13),
CONCAT(first_name, ' ', last_name),
phone,
CONCAT(city, ' ', state),
zip_code,
'---'
) customer_address
FROM
sales.customers
ORDER BY
first_name,
last_name;
La siguiente imagen ilustra la salida parcial:

Tenga en cuenta que debe cambiar el resultado de la consulta de la cuadrícula a texto para ver el resultado en el formato anterior:

D) Usar CONCAT_WS() para generar un archivo CSV
Esta declaración utiliza una coma (,) como separador y concatena valores en first_name, last_name y la columna de correo electrónico para generar un archivo CSV:
SELECT
CONCAT_WS(',', first_name, last_name, email)
FROM
sales.customers
ORDER BY
first_name,
last_name;
Resultado:

En este tutorial, ha aprendido cómo usar la función CONCAT_WS() de SQL Server para concatenar cadenas con un separador, recuerde que esta función solo está disponible en SQL Server 2017 o superior.
