46 votes

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

J'utilise le code SQL suivant pour concaténer plusieurs colonnes de base de données d'une table en une colonne dans le jeu de résultats :

SELECT (field1 + '' + field2 + '' + field3) FROM table1

Lorsque l'un des champs est nul, j'ai un résultat nul pour l'ensemble de l'expression de concaténation. Comment puis-je surmonter cela?

La base de données est MS SQL Server 2008. Au fait, est-ce la meilleure façon de concaténer les colonnes de la base de données ? Existe-t-il un SQL standard faisant cela ?

45voto

Steve Prentice Points 7638

La méthode standard SQL pour le faire 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

38voto

BornToCode Points 887

Si vous utilisiez SQL 2012 ou une version ultérieure, vous pouvez 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 édité ma réponse pour y correspondre.

14voto

MatBailie Points 37610

Le comportement normal avec NULL est que toute opération incluant un NULL donne un NULL...

 - 9 * NULL  = NULL  
- NULL + '' = NULL  
- etc  

Pour surmonter cela, utilisez ISNULL ou COALESCE pour remplacer toutes les instances de NULL par autre chose.

 SELECT (ISNULL(field1,'') + '' + ISNULL(field2,'') + '' + ISNULL(field3,'')) FROM table1

5voto

BiggsTRC Points 10362

Si vous rencontrez un problème avec les valeurs NULL, utilisez la fonction COALESCE pour remplacer le 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

4voto

Brian Scott Points 5422

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 qui empêchera l'opération de concaténation d'être évaluée comme un résultat NULL global.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X