Dans MySQL, le CONCAT_WS()
La fonction vous permet d'ajouter un séparateur aux chaînes concaténées. Si vous utilisez simplement le CONCAT()
fonction, vous n'auriez pas de séparateur (sauf si vous avez explicitement ajouté un séparateur comme argument entre chaque argument de chaîne).
Une utilisation courante de CONCAT_WS()
fonction est de créer une liste délimitée par des virgules.
Voici un exemple :
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
Résultat :
+------------------+ | Location | +------------------+ | Sydney,Australia | +------------------+
Et vous pouvez y ajouter un espace si vous le souhaitez :
SELECT CONCAT_WS(', ','Sydney', 'Australia') AS Location;
Résultat :
+-------------------+ | Location | +-------------------+ | Sydney, Australia | +-------------------+
Le séparateur
Rien ne dit que le séparateur doit être une virgule. Le séparateur peut être n'importe quelle chaîne.
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 = 'NZL';
Résultat :
+---------------------------+ | 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 | +---------------------------+
Valeurs NULLES
Si l'un des arguments est un NULL
valeur, MySQL ignorera cette valeur et son séparateur, mais il traitera toujours les autres.
Exemple :
SELECT CONCAT_WS(', ','Auckland', NULL, 'New Zealand') AS Location;
Résultat :
+-----------------------+ | Location | +-----------------------+ | Auckland, New Zealand | +-----------------------+
Séparateur de valeur NULL
Si le séparateur lui-même est un NULL
valeur, l'opération de concaténation renverra NULL
.
Exemple :
SELECT CONCAT_WS(NULL,'Auckland', NULL, 'New Zealand') AS Location;
Résultat :
+----------+ | Location | +----------+ | NULL | +----------+
C'est l'une des différences entre MySQL et T-SQL (SQL Server, Azure). En T-SQL, si le séparateur est un NULL
valeur, les valeurs de chaîne sont toujours concaténées, mais sans séparateur.