web-dev-qa-db-fra.com

concaténer deux colonnes de base de données dans une colonne de résultats

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?

46
jilt3d

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
44
Steve Prentice

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.

38
BornToCode

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
14
MatBailie

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

http://www.codeproject.com/KB/database/DataCrunching.aspx

5
IAmTimCorey

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.

4
Brian Scott

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

1
raman

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
1
Pramod Pandav