Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So verketten Sie String- und NULL-Werte in SQL Server

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.