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.
Utilisez la fonction COALESCE pour remplacer les valeurs NULL par une chaîne vide.
SELECT Column1 + COALESCE(Column2, '') AS Result
FROM YourTable
Vous pouvez faire une union
:
(SELECT Column1 + Column2 FROM Table1 WHERE Column2 is not NULL)
UNION
(SELECT Column1 FROM Table1 WHERE Column2 is NULL);
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.
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, '')
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.
Si vous utilisez MySq, utilisez ifnull (Column2, '')
Vous pouvez utiliser une condition de cas:
case when column_2 is not null
then concatenate
else column_1
end