it-swarm.com.de

Verketten Sie mit NULL-Werten in SQL

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

Ich habe eine Tabelle mit zwei Spalten. Spalte 1 hat eine Gruppe von Wörtern und Spalte 2 hat auch eine Gruppe von Wörtern. Ich möchte sie mit + Operator ohne Leerzeichen verketten.

Zum Beispiel: Apfelsaft

Die Sache ist, wenn es einen Nullwert in der zweiten Spalte gibt, möchte ich nur das erste Element als Ergebnis haben.

Zum Beispiel: Banane

Result
------
applejuice
watermelon
banana
redberry

Wenn ich jedoch column1 + column2 verwende, gibt es einen NULL-Wert, wenn Comunm2 NULL ist. Ich möchte "Banane" als Ergebnis haben.

14
LuckySlevin

Verwenden Sie die COALESCE-Funktion, um NULL-Werte durch eine leere Zeichenfolge zu ersetzen.

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

Sie können eine union machen:

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

Ich bin nicht sicher, was Sie als Datenbank verwenden, aber ich würde nach einer "Coalesce" -Funktion für Ihren speziellen SQL-Dialekt suchen und diese verwenden.

0
Chris E

Das + -Zeichen für die Verkettung in TSQL kombiniert standardmäßig Zeichenfolge + Null zu Null als unbekannten Wert. 

Sie haben zwei Möglichkeiten: Sie können diese Variable für die Sitzung ändern, die steuert, was SQL mit NULLs tun soll

http://msdn.Microsoft.com/de-de/library/ms176056.aspx

Oder Sie können jede Spalte vor dem Verketten zu einer leeren Zeichenfolge zusammenführen.

COALESCE(Column1, '')

http://msdn.Microsoft.com/de-de/library/ms190349.aspx

0
Chris

Standard-SQL erfordert, dass die Zeichenfolgenverkettung, die einen NULL-Wert enthält, eine NULL-Ausgabe generiert, die jedoch mit der ||-Operation geschrieben wird:

SELECT a || b
  FROM SomeTable;

Die Ausgabe ist null, wenn entweder a oder b oder beide NULL enthalten.

Die Verwendung von + zum Verketten von Zeichenfolgen zeigt an, dass Sie eine DBMS-spezifische Erweiterung verwenden. Das Verhalten kann dasselbe sein, wie es der Standard verlangt - in der Tat scheint dies der Kern Ihrer Frage zu sein.

Einige DBMS - insbesondere Oracle - neigen dazu, leere Zeichenfolgen als leere Zeichenfolgen zu behandeln. dann kannst du fröhlich weg verketten. Dieses Verhalten ist jedoch nicht streng standardkonform, wenn der ||-Operator verwendet wird.

Erwägen Sie die Verwendung von COALESCE oder NVL oder IFNULL oder einer ähnlichen Funktion, um den NULL vor dem Verketten einer leeren Zeichenfolge zuzuordnen.

0

Einige Beiträge, die ich mit Tags versehen habe, wurden von einem Moderator in "SQL" umbenannt. Ich gehe also davon aus, dass Sie MSSQL verwenden

COALESCE gibt den ERSTEN Wert ungleich Null zurück.

SELECT COALESCE('a', NULL, 'c')

wird nur 'a' zurückgeben

Wenn Sie Vorname + Nachname möchten, wobei manchmal der eine oder andere NULL ist, verwenden Sie CONCAT. Concat addiert die Zeichenfolgen und ersetzt NULLS durch einen Nicht-Null-Wert der Länge 0.

 SELECT CONCAT('a', NULL, 'c')

wird "ac" zurückgeben

Wenn Sie Fn Leerzeichen + zweiter Vorname Leerzeichen + LN wollen, kombinieren Sie concatinate mit CONCAT:

SELECT CONCAT('a' + ' ', NULL + ' ', 'c')

Gibt 'a c' zurück.

Das Leerzeichen nach dem Zwischennamen (null) wird mit + und NULL entfernt.

NULL + '' ist null.

In Fällen, in denen Middlename oder Firstname null ist, werden Sie keine zusätzlichen unerwünschten Leerzeichen erhalten.

0

Wenn Sie MySq verwenden, verwenden Sie ifnull (Column2, '').

0
CapelliC

Sie können eine Fallbedingung verwenden: 

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