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.
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 ...
Vielleicht möchten Sie die FirstName + ' ' + MiddleInitial + ' ' + LastName + ' ' + Suffix
Verkettung über die REPLACE()
Funktion weiterleiten um doppelte Leerzeichen in ein einzelnes Leerzeichen zu ersetzen.
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()
:
Test:
%Vor% Wenn Sie SQL Server 2012+
verwenden, können Sie CONCAT
und +
verwenden:
Wie es funktioniert:
NULL
ist, dann NULL + ' '
→ NULL
CONCAT
handles NULL
NULLs
, TRIM
letztes Leerzeichen stehen. 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
Tags und Links sql sql-server tsql