Problème :
Vous souhaitez concaténer des valeurs NULL avec des valeurs de chaîne d'une colonne différente dans SQL Server.
Exemple :
Notre base de données a une table nommée children
avec des données dans les colonnes suivantes :id (clé primaire), prénom , deuxième_deuxième , et nom_de_famille .
identifiant | prénom | deuxième_prénom | nom_de_famille |
---|---|---|---|
1 | Linda | NULL | Jackson |
2 | Marie | Alice | Thomson |
3 | NULL | Steven | NULL |
4 | NULL | NULL | Marron |
Nous voulons afficher le prénom d'une colonne, le deuxième prénom de la colonne suivante et le nom de famille de la dernière colonne sous la forme d'une chaîne, même si l'une des colonnes stocke un NULL.
Solution 2 :
Nous utiliserons le CONCAT()
une fonction. Voici la requête que vous écririez :
SELECT CONCAT(first_name, middle_name, last_name) AS name FROM children;
Voici le résultat :
nom |
---|
Linda Jackson |
MarieAliceThomson |
Steven |
Marron |
Discussion :
Utilisez le CONCAT()
pour concaténer des valeurs de chaîne à partir d'expressions ou de colonnes contenant un NULL. Cette fonction prend une liste de chaînes (ou NULL) et affiche toutes ces valeurs dans une seule chaîne. Il n'y a pas de séparateur entre les valeurs, donc les résultats (comme dans notre exemple) peuvent ne pas être formatés comme prévu. Comment pouvons-nous corriger cela ? Regardez un autre CONCAT()
requête :
Solution 2 :
Voici une autre option de requête :
SELECT CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name FROM children;
Voici le résultat :
nom |
---|
Linda Jackson |
Mary Alice Thomson |
Steven |
Marron |
Maintenant, en dehors des valeurs de chaîne, cette fonction prend également des espaces (placés entre les valeurs concaténées). Cela sépare une partie du nom d'une autre. Mais comme on le voit, cette solution n'est pas non plus idéale; les noms complets sans deuxième prénom ont un espace supplémentaire, tandis que les enregistrements avec un seul nom ont deux espaces supplémentaires.
Dans ce cas, le CONCAT_WS()
fonction est la meilleure solution.
Solution 3 :
Le CONCAT_WS()
La fonction prend un premier argument supplémentaire :un caractère qui sert de séparateur entre les chaînes. Voici la requête :
SELECT CONCAT_WS(' ' , first_name, middle_name, last_name) AS name FROM children;
Et le résultat :
nom |
---|
Linda Jackson |
Mary Alice Thomson |
Steven |
Marron |
Cette requête affiche les noms complets des enfants, sans espaces inutiles.