sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo agregar un separador a una cadena concatenada en SQL Server – CONCAT_WS()

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 (charncharnvarcharvarchar ).

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.