J'utilise le code SQL suivant pour concaténer plusieurs colonnes de la base de données d'une table dans une colonne du jeu de résultats:
SELECT (field1 + '' + field2 + '' + field3) FROM table1
Quand l'un des champs est nul, j'ai un résultat nul pour toute l'expression de concaténation. Comment puis-je surmonter cela?
La base de données est MS SQL Server 2008. En passant, est-ce le meilleur moyen de concaténer les colonnes de la base de données? Y at-il un SQL standard faisant cela?
La manière standard de SQL de faire cela serait:
SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1
Exemple:
INSERT INTO table1 VALUES ('hello', null, 'world');
SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1;
helloworld
Si vous utilisiez SQL 2012 ou une version ultérieure, vous pourriez utiliser la fonction CONCAT:
SELECT CONCAT(field1, field2, field3) FROM table1
Les champs NULL ne briseront pas votre concaténation.
@bummi - Merci pour le commentaire - a modifié ma réponse pour y correspondre.
Le comportement normal avec NULL est que toute opération incluant une valeur NULL génère une valeur NULL ...
- 9 * NULL = NULL
- NULL + '' = NULL
- etc
Pour surmonter cela, utilisez ISNULL ou COALESCE pour remplacer toute instance de NULL par quelque chose d'autre.
SELECT (ISNULL(field1,'') + '' + ISNULL(field2,'') + '' + ISNULL(field3,'')) FROM table1
Si vous rencontrez des problèmes avec les valeurs NULL, utilisez la fonction COALESCE pour remplacer NULL par la valeur de votre choix. Votre requête ressemblerait alors à ceci:
SELECT (COALESCE(field1, '') + '' + COALESCE(field2, '') + '' + COALESCE(field3,'')) FROM table1
Utilisez ISNULL pour le surmonter.
Exemple:
SELECT (ISNULL(field1, '') + '' + ISNULL(field2, '')+ '' + ISNULL(field3, '')) FROM table1
Cela remplacera ensuite votre contenu NULL par une chaîne vide, ce qui préservera l'opération de concaténation de l'évaluation en tant que résultat NULL global.
Vient de lancer la colonne comme Varchar (taille)
Si les deux colonnes sont numériques, utilisez le code ci-dessous.
Exemple:
Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table
Quelle sera la taille de col3
il sera 40 ou quelque chose d'autre
Si les deux colonnes sont numériques, utilisez ce code
Vient de lancer la colonne comme Varchar (taille)
Exemple:
Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table