web-dev-qa-db-fra.com

Concaténer avec des valeurs NULL en SQL

Column1      Column2
-------      -------
 Apple        juice
 water        melon
 banana
 red          berry       

J'ai une table qui a deux colonnes. Column1 a un groupe de mots et Column2 a également un groupe de mots. Je veux les concaténer avec l'opérateur + sans espace.

Par exemple: le jus de pomme

Le fait est que, s'il y a une valeur nulle dans la deuxième colonne, je veux seulement avoir le premier élément comme résultat.

Par exemple: banane

Result
------
applejuice
watermelon
banana
redberry

Cependant, lorsque j'utilise column1 + column2, il donne une valeur NULL si Comunm2 est NULL. Je veux avoir "banane" à la suite.

14
LuckySlevin

Utilisez la fonction COALESCE pour remplacer les valeurs NULL par une chaîne vide.

SELECT Column1 + COALESCE(Column2, '') AS Result
    FROM YourTable
35
Joe Stefanelli

Vous pouvez faire une union:

(SELECT Column1 + Column2 FROM Table1 WHERE Column2 is not NULL)
UNION
(SELECT Column1 FROM Table1 WHERE Column2 is NULL);
1
Chris Cooper

Je ne suis pas sûr de ce que vous utilisez comme base de données, mais je rechercherais une fonction de "fusion" pour votre dialecte SQL particulier et l'utiliserais.

0
Chris E

Le signe + pour la concaténation dans TSQL associe par défaut chaîne + null à null en tant que valeur inconnue. 

Vous pouvez faire l'une des deux choses, vous pouvez changer cette variable pour la session qui contrôle ce que Sql doit faire avec Null

http://msdn.Microsoft.com/en-us/library/ms176056.aspx

Ou vous pouvez coaliser chaque colonne en une chaîne vide avant la concaténation.

COALESCE(Column1, '')

http://msdn.Microsoft.com/en-us/library/ms190349.aspx

0
Chris

Le SQL standard nécessite que la concaténation de chaînes impliquant une valeur NULL génère une sortie NULL, mais écrite à l'aide de l'opération ||:

SELECT a || b
  FROM SomeTable;

La sortie sera nulle si a ou b ou les deux contiennent une valeur NULL.

L'utilisation de + pour concaténer des chaînes indique que vous utilisez une extension spécifique au SGBD. Le comportement pourrait être le même que celui requis par la norme - en fait, cela semble être l’essentiel de votre question.

Certains SGBD, notamment Oracle, ont tendance à considérer les chaînes vides comme des chaînes vides; alors vous pouvez concaténer loin gaiement. Toutefois, ce comportement n'est pas strictement conforme à la norme si l'opérateur || est utilisé.

Pensez à utiliser COALESCE ou NVL ou IFNULL ou une fonction similaire pour mapper la valeur NULL sur une chaîne vide avant la concaténation.

0
Jonathan Leffler

Si vous utilisez MySq, utilisez ifnull (Column2, '')

0
CapelliC

Vous pouvez utiliser une condition de cas: 

case when column_2 is not null 
     then concatenate
     else column_1
end
0
harsh