Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment ajouter un séparateur à une chaîne concaténée dans SQL Server - CONCAT_WS()

Dans SQL Server et Azure, si vous devez concaténer deux chaînes ou plus, vous pouvez utiliser T-SQL CONCAT() une fonction. Comme pour toute opération de concaténation de base, cette fonction joint les chaînes ensemble, de bout en bout.

Mais que se passe-t-il si vous devez ajouter un séparateur entre chaque chaîne ?

Par exemple, vous pouvez créer une liste de chaînes séparées par des virgules. Dans ce cas, vous voudriez insérer une virgule entre chaque chaîne. Comme ceci :

Paris, France

Au lieu de cela :

ParisFrance

Heureusement, T-SQL fournit le CONCAT_WS() fonction qui vous aide à faire exactement cela. Le CONCAT_WS() la fonction fonctionne exactement comme CONCAT() fonction, sauf qu'elle prend un argument supplémentaire - le séparateur que vous souhaitez utiliser.

Voici un exemple :

SELECT CONCAT_WS(',','Paris', 'France') AS Location;

Résultat :

Location    
------------
Paris,France

Et vous pouvez y ajouter un espace si vous le souhaitez :

SELECT CONCAT_WS(', ','Paris', 'France') AS Location;

Résultat :

Location     
-------------
Paris, France

Le séparateur

Rien ne dit que le séparateur doit être une virgule. Le séparateur peut être une expression de n'importe quel type de caractère (charncharnvarchar , ou varchar ).

Voici le même exemple que le précédent, sauf que celui-ci utilise un séparateur différent.

SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;

Résultat :

Location      
--------------
Paris - France

Un exemple de base de données

Voici un exemple de récupération de données d'une base de données et de combinaison de deux colonnes en une seule, séparées par une virgule :

SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location
FROM city
INNER JOIN country ON
city.CountryCode = country.Code
WHERE country.Code = 'THA';

Résultat :

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

Valeurs NULLES

Si l'un des arguments est un NULL valeur, SQL Server ignorera cette valeur et son séparateur, mais il traitera toujours les autres.

Exemple :

SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;

Résultat :

Location     
-------------
Paris, France

Séparateur de valeur NULL

Si le séparateur lui-même est un NULL valeur, l'opération de concaténation sera toujours effectuée, mais sans séparateur.

Exemple :

SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;

Résultat :

Location   
-----------
ParisFrance

C'est l'une des différences entre T-SQL et MySQL (MySQL a aussi un CONCAT_WS() une fonction). Dans MySQL, si le séparateur est un NULL valeur, la concaténation donne un NULL valeur.