Problem:
Sie möchten NULL-Werte mit Zeichenfolgenwerten aus einer anderen Spalte in SQL Server verketten.
Beispiel:
Unsere Datenbank hat eine Tabelle namens children
mit Daten in den folgenden Spalten:id (Primärschlüssel), Vorname , Zwischenname und Nachname .
id | Vorname | Zwischenname | Nachname |
---|---|---|---|
1 | Linda | NULL | Jackson |
2 | Maria | Alice | Thomson |
3 | NULL | Steven | NULL |
4 | NULL | NULL | Braun |
Wir wollen den Vornamen aus einer Spalte, den zweiten Vornamen aus der nächsten Spalte und den Nachnamen aus der letzten Spalte als einen String anzeigen, selbst wenn eine der Spalten eine NULL enthält.
Lösung 2:
Wir verwenden CONCAT()
Funktion. Hier ist die Abfrage, die Sie schreiben würden:
SELECT CONCAT(first_name, middle_name, last_name) AS name FROM children;
Hier ist das Ergebnis:
name |
---|
LindaJackson |
MaryAliceThomson |
Steven |
Braun |
Diskussion:
Verwenden Sie den CONCAT()
Funktion zum Verketten von Zeichenfolgenwerten aus Ausdrücken oder Spalten, die NULL enthalten. Diese Funktion nimmt eine Liste von Zeichenfolgen (oder NULL-Werten) und zeigt alle diese Werte in einer Zeichenfolge an. Es gibt kein Trennzeichen zwischen den Werten, sodass die Ergebnisse (wie in unserem Beispiel) möglicherweise nicht wie erwartet formatiert sind. Wie können wir das korrigieren? Sehen Sie sich ein weiteres CONCAT()
an Abfrage:
Lösung 2:
Hier ist eine weitere Abfrageoption:
SELECT CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name FROM children;
Hier ist das Ergebnis:
name |
---|
Linda Jackson |
Mary Alice Thomson |
Steven |
Braun |
Abgesehen von Zeichenfolgenwerten nimmt diese Funktion jetzt auch einige Leerzeichen (platziert zwischen den verketteten Werten). Dies trennt einen Teil des Namens von einem anderen. Aber wie wir sehen, ist auch diese Lösung nicht ideal; vollständige Namen ohne zweite Vornamen haben ein zusätzliches Leerzeichen, während die Datensätze mit nur einem Namen zwei zusätzliche Leerzeichen haben.
In diesem Fall die CONCAT_WS()
Funktion ist die bessere Lösung.
Lösung 3:
Der CONCAT_WS()
Die Funktion erwartet ein zusätzliches erstes Argument:ein Zeichen, das als Trennzeichen zwischen Zeichenfolgen dient. Hier ist die Abfrage:
SELECT CONCAT_WS(' ' , first_name, middle_name, last_name) AS name FROM children;
Und das Ergebnis:
name |
---|
Linda Jackson |
Mary Alice Thomson |
Steven |
Braun |
Diese Abfrage zeigt die vollständigen Namen der Kinder ohne unnötige Leerzeichen an.