Erstes, mittleres Initial, Nachname und Suffix in T-SQL kombinieren (keine zusätzlichen Leerzeichen)

8

Ich versuche, das Rad hier nicht neu zu erfinden ... Ich habe diese vier Felder:

%Vor%

Und ich möchte ein FullName -Feld in einer Ansicht erstellen, aber ich kann keine zusätzlichen Leerzeichen haben, wenn Felder leer sind ...

Also kann ich nicht FirstName + ' ' + MiddleInitial + ' ' + LastName + ' ' + Suffix... machen. Wenn es kein mittleres Initial oder Suffix gibt, würde ich 2 zusätzliche Leerzeichen im Feld haben. Ich denke, ich brauche eine Case-Anweisung, aber ich dachte, dass jemand eine handliche Methode dafür hätte ... Auch die m iddleinitial und suffix können null sein.

    
Paul 23.04.2010, 15:30
quelle

8 Antworten

22

Wenn angenommen wird, dass alle Spalten nullfähig sein können, können Sie Folgendes tun:

%Vor%

Dies beruht auf der Tatsache, dass das Hinzufügen zu einem NULL-Wert einen NULL ergibt.

    
Thomas 23.04.2010, 15:35
quelle
11

Welche Optionen Sie auch wählen, hier ist etwas, worüber Sie nachdenken sollten: Dies wird eine ziemlich umständliche und damit zeitraubende Option sein, besonders wenn Sie es in einer Ansicht haben, die jedes Mal für jede fragliche Zeile ausgewertet wird / p>

Wenn Sie dies häufig benötigen, empfehle ich Ihnen, dies als permanentes, berechnetes Feld zu Ihrer Basistabelle hinzuzufügen - etwa wie folgt:

%Vor%

Wenn es beibehalten wird, wird es Teil der zugrunde liegenden Tabelle und wird von SQL Server gespeichert und auf dem neuesten Stand gehalten. Wenn Sie es abfragen, erhalten Sie den aktuellen Wert ohne zurück, wodurch die Kosten entstehen, die Felder miteinander verketten zu müssen und festzulegen, welche zu verwenden und welche zu ignorieren sind ...

Nur etwas, worüber Sie nachdenken sollten - etwas, das zu viele Datenbankadministratoren und Datenbankentwickler ignorieren und / oder nicht wissen ...

    
marc_s 23.04.2010 15:38
quelle
8

Vielleicht möchten Sie die FirstName + ' ' + MiddleInitial + ' ' + LastName + ' ' + Suffix Verkettung über die REPLACE() Funktion weiterleiten um doppelte Leerzeichen in ein einzelnes Leerzeichen zu ersetzen.

%Vor%

BEARBEITEN:

Sie haben gerade bemerkt, dass einige Ihrer Felder möglicherweise NULL sind, und daher würde das obige in diesem Fall nicht funktionieren, da die gesamte Zeichenfolge NULL werden würde. In diesem Fall können Sie COALESCE() Methode wie von Thomas vorgeschlagen , aber immer noch in eine REPLACE() :

gewickelt %Vor%

Test:

%Vor%     
Daniel Vassallo 23.04.2010 15:34
quelle
0

Wählen Sie CONCAT (IFNULL (Vorname, ''),             "",             IFNULL (MiddleName, ''),             "",             IFNULL (Nachname, '')) AS-Name von der Tabelle

    
Harikumar 10.02.2017 04:49
quelle
0

Hier ist eine Lösung:

%Vor%     
Jonathan 23.04.2010 15:41
quelle
0

Ich musste Vorname, Zweiter Vorname und Nachname eingeben. Meine Herausforderung bestand darin, NULL-Werte zu behandeln, die nach dem folgenden Code verwendet wurden.

%Vor%

Testen Sie verschiedene Szenarien, wenn Sie interessiert sind:)

%Vor%     
Vijred 13.03.2015 10:55
quelle
0

Wenn Sie SQL Server 2012+ verwenden, können Sie CONCAT und + verwenden:

%Vor%

Wie es funktioniert:

  1. Wenn ein Teil des vollständigen Namens NULL ist, dann NULL + ' 'NULL
  2. CONCAT handles NULL
  3. Falls nach einem Teil des Namens nur NULLs , TRIM letztes Leerzeichen stehen.

LiveDemo

    
lad2025 31.05.2016 05:05
quelle
-1

create Funktion getfname (@n varchar (30)) gibt varchar zurück (30) wie Start deklariere @s varchar (30) set @ s = LINKS (@ n, charindex ('', @ n) -1) kehrt zurück Ende

create Funktion getLname (@n varchar (30)) gibt varchar zurück (30) wie Start deklariere @s varchar (30)

set @ s = Teilzeichenfolge (@ n, Zeichenindex ('', @ n + 1), Len (@n))

gibt @s zurück Ende

    
Akshay Kumar Konduri 28.09.2014 16:53
quelle

Tags und Links