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 (char
, nchar
, nvarchar
, 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.