En SQL Server y Azure, si necesita concatenar dos o más cadenas, puede usar T-SQL CONCAT()
función. Al igual que con cualquier operación de concatenación básica, esta función une las cadenas, de extremo a extremo.
Pero, ¿qué sucede si necesita agregar un separador entre cada cadena?
Por ejemplo, es posible que desee crear una lista de cadenas separadas por comas. En este caso, le gustaría insertar una coma entre cada cadena. Así:
Paris, France
En lugar de esto:
ParisFrance
Afortunadamente, T-SQL proporciona el CONCAT_WS()
función que le ayuda a hacer exactamente eso. El CONCAT_WS()
la función funciona igual que CONCAT()
función, excepto que requiere un argumento adicional:el separador que le gustaría usar.
He aquí un ejemplo:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
Resultado:
Location ------------ Paris,France
Y puedes agregar un espacio ahí si quieres:
SELECT CONCAT_WS(', ','Paris', 'France') AS Location;
Resultado:
Location ------------- Paris, France
El Separador
No hay nada que decir que el separador debe ser una coma. El separador puede ser una expresión de cualquier tipo de carácter (char
, nchar
, nvarchar
o varchar
).
Este es el mismo ejemplo que el anterior, excepto que este usa un separador diferente.
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
Resultado:
Location -------------- Paris - France
Un ejemplo de base de datos
Este es un ejemplo de cómo recuperar datos de una base de datos y combinar dos columnas en una, separadas por una coma:
SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location FROM city INNER JOIN country ON city.CountryCode = country.Code WHERE country.Code = 'THA';
Resultado:
Location --------------------------- Bangkok, Thailand Nonthaburi, Thailand Nakhon Ratchasima, Thailand Chiang Mai, Thailand Udon Thani, Thailand Hat Yai, Thailand Khon Kaen, Thailand Pak Kret, Thailand Nakhon Sawan, Thailand Ubon Ratchathani, Thailand Songkhla, Thailand Nakhon Pathom, Thailand
Valores NULOS
Si alguno de los argumentos es NULL
valor, SQL Server omitirá ese valor y su separador, pero seguirá procesando los demás.
Ejemplo:
SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;
Resultado:
Location ------------- Paris, France
Separador de valor NULL
Si el propio separador es un NULL
valor, la operación de concatenación aún se realizará, pero sin un separador.
Ejemplo:
SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;
Resultado:
Location ----------- ParisFrance
Esta es una de las diferencias entre T-SQL y MySQL (MySQL también tiene un CONCAT_WS()
función). En MySQL, si el separador es NULL
valor, la concatenación da como resultado un NULL
valor.