Was ist die kürzeste TSQL verketten Sie den Namen einer person, die möglicherweise null-Werte enthalten
3 Felder: Vorname, MiddleName, LastName
Jedes Feld kann null sein, aber ich will nicht extra Räume. Format sollte "Erste Mitte Letzten", "Vorname Nachname", "Nachname", usw.
Ich denke, die Frage sollte angegeben werden, inline SQL. Ansonsten kann man nur einen Charakter proc, als einer der Antworten erwähnt.
InformationsquelleAutor Keith Walton | 2008-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendung einer UDF:
Diese Weise alle Ihre Logik für die Verkettung von Bezeichnungen ist, an einem Ort und sobald Sie bekommen Sie geschrieben, Sie ist kurz zu nennen.
Gute Trauer. Vereinbart. Das wird so langsam wie Melasse, wenn Sie es zu tun haben mit keinem großen Anzahl von Werten.
InformationsquelleAutor Jamal Hansen
HINWEIS: Dies wird nicht verlassen, nachfolgende oder führenden Leerzeichen. Das ist, warum es ist ein bisschen hässlicher als andere Lösungen.
Andrew, ich hasse es, wenn das passiert. Bitte Stimmen auf uservoice für eine Veränderung: stackoverflow.uservoice.com/pages/general/suggestions/41056
Ja. Angesichts der anderen beiden Lösungen nicht wirklich tun, was angefordert wird... Ah gut, denke, es ist nur sauren Trauben meinerseits. Ich würde gerne sehen, einige Rechenschaftspflicht obwohl 🙁
Es nicht lassen, ein Doppel-Leerzeichen in der Mitte, wenn es keine MiddleName? Wahrscheinlich braucht einen Raum-Reduktion-substitution der ganzen Sache. Oder so etwas.
Hehe... Du hast Recht 🙂
InformationsquelleAutor Andrew Rollings
Unter der Annahme von "extra-Räume", die Sie bedeuten, zusätzliche Leerzeichen eingefügt, während die Verkettung (das ist eine vernünftige Annahme, wie ich finde. Wenn Sie zusätzliche Leerzeichen in Ihren Daten haben, sollten Sie es sauber):
funktioniert, da Sie ein Leerzeichen hinzufügen, um den Namen - die, wenn es NULL ergibt NULL - das ergibt eine leere Zeichenkette.
Edit: Wenn Sie nicht zählen die SET-OPTION, die eine Verbindung oder db option:
ist ein klein wenig kürzer, aber ein großes bisschen hässlicher.
Edit2: Da Sie akzeptiert das UDF-Antwort - IMO, das ist ein bisschen ein cheat - hier einige in die gleiche Richtung:
b ist eine Ansicht. 😉 Oder. eine gespeicherte Prozedur,
Aber, da EXEC-optional:
+1 Dies ist die beste/kürzeste Antwort und entspricht voll den OP-Anforderungen.
InformationsquelleAutor Mark Brackett
InformationsquelleAutor devio
Warum nicht verwenden Sie eine berechnete Spalte auf die Tabelle und führt die concat verwenden Ihre bevorzugte syntax aus der viele hier gepostet? Dann wirst du einfach die Abfrage die berechnete Spalte - sehr elegant und wenn Sie weiterhin die berechnete Spalte, dann können Sie sogar leichte Leistungssteigerung.
Beispiel hier
InformationsquelleAutor Rich Andrews
InformationsquelleAutor Gordon Bell
ETC
InformationsquelleAutor GregD
WARUM DAS FUNKTIONIERT,
Werden die Felder reduziert, um eine leere Zeichenkette, wenn NULL oder Leerzeichen, durch die LTRIM, RTRIM und ISNULL-Funktionen.
Wird dieser Wert als Präfix einen einzigen Raum, der dann im Vergleich zu einem einzigen Raum, durch die NULLIF-Funktion. Wenn Sie gleich sind, wird ein NULL-Ergebnisse. Wenn nicht gleich, dann wird der Wert verwendet wird.
Schließlich ISNULL() dient zur Konvertierung der NULL übergeben NULLIF auf eine leere Zeichenfolge.
InformationsquelleAutor user3230059
LTrim(RTrim(Replace(IsNull(Firstname + ' ', '') +
isNull(MiddleName, '') +
IsNull(' ' + LastName, ''), ' ', ' ')))
ahh, sorry, sollte writen Ltrim(rtrim(...))
InformationsquelleAutor Charles Bretana
InformationsquelleAutor Muhammad Ali Shan