En MySQL, el CONCAT_WS()
La función le permite agregar un separador a cadenas concatenadas. Si solo usa el CONCAT()
función, no tendría ningún separador (a menos que haya agregado explícitamente un separador como argumento entre cada argumento de cadena).
Un uso común de CONCAT_WS()
función es crear una lista delimitada por comas.
He aquí un ejemplo:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
Resultado:
+------------------+ | Location | +------------------+ | Sydney,Australia | +------------------+
Y puedes agregar un espacio ahí si quieres:
SELECT CONCAT_WS(', ','Sydney', 'Australia') AS Location;
Resultado:
+-------------------+ | Location | +-------------------+ | Sydney, Australia | +-------------------+
El Separador
No hay nada que decir que el separador debe ser una coma. El separador puede ser cualquier cadena.
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 = 'NZL';
Resultado:
+---------------------------+ | Location | +---------------------------+ | Auckland, New Zealand | | Christchurch, New Zealand | | Manukau, New Zealand | | North Shore, New Zealand | | Waitakere, New Zealand | | Wellington, New Zealand | | Dunedin, New Zealand | | Hamilton, New Zealand | | Lower Hutt, New Zealand | +---------------------------+
Valores NULOS
Si alguno de los argumentos es NULL
valor, MySQL omitirá ese valor y su separador, pero seguirá procesando los demás.
Ejemplo:
SELECT CONCAT_WS(', ','Auckland', NULL, 'New Zealand') AS Location;
Resultado:
+-----------------------+ | Location | +-----------------------+ | Auckland, New Zealand | +-----------------------+
Separador de valor NULL
Si el propio separador es un NULL
valor, la operación de concatenación devolverá NULL
.
Ejemplo:
SELECT CONCAT_WS(NULL,'Auckland', NULL, 'New Zealand') AS Location;
Resultado:
+----------+ | Location | +----------+ | NULL | +----------+
Esta es una de las diferencias entre MySQL y T-SQL (SQL Server, Azure). En T-SQL, si el separador es NULL
valor, los valores de cadena todavía están concatenados, pero sin un separador.