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

Comment concaténer des valeurs de chaîne et NULL dans SQL Server

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.