Ich habe eine Spalte, die Vorname und Nachname zusammen hat. Ich schreibe einen Bericht, um den Vor- und Nachnamen zu trennen. Wie bekomme ich den Vornamen und den Nachnamen in T-SQL getrennt?T-SQL-Teilzeichenfolge - Trennen von Vor- und Nachname
Antwort
Sie können dies tun, wenn Vorname und Nachname durch Leerzeichen getrennt sind:
SELECT SUBSTRING(FirstAndSurnameCol, 0, CHARINDEX(' ', FirstAndSurnameCol)) Firstname,
SUBSTRING(FirstAndSurnameCol, CHARINDEX(' ', FirstAndSurnameCol)-1, LEN(FirstAndSurnameCol)) Surname FROM ...
SUBSTRING (FirstAndSurnameCol, CHARINDEX ('', FirstAndSurnameCol) +1, LEN (FirstAndSurnameCol)) –
Dies sollte funktionieren:
Select
LTRIM(RTRIM(SUBSTRING(FullName, 0, CHARINDEX(' ', FullName)))) As FirstName
, LTRIM(RTRIM(SUBSTRING(FullName, CHARINDEX(' ', FullName)+1, 8000)))As LastName
FROM TABLE
bearbeiten: Angenommen Aaron und Jonnys Hinweis mit der festen Länge von 8000 um unnötige Berechnungen zu vermeiden.
... und es tut! –
Wenn im ursprünglichen Namen kein Leerzeichen enthalten ist, führt dies dazu, dass der Vorname leer ist und der Nachname der Wert ist. – Evan
die FirstName
Unter der Annahme, alle Zeichen bis zum ersten Platz:
SELECT
SUBSTRING(username, 1, CHARINDEX(' ', username) - 1) AS FirstName,
SUBSTRING(username, CHARINDEX(' ', username) + 1, 8000) AS LastName
FROM
whereever
Warum verwenden Sie einen Punkt? – libjup
und vielleicht möchten Sie LEN (Benutzername) anstatt nur 8000 – libjup
@libjup verwenden, gibt es eigentlich ziemlich guten Grund, einen festen Wert zu verwenden, der höher ist als jede mögliche Länge. Warum sollten Sie die Länge jeder einzelnen Zeile berechnen? Vergeudete Zyklen. –
validate last name is blank
SELECT
person.fullName,
(CASE WHEN 0 = CHARINDEX(' ', person.fullName)
then person.fullName
ELSE SUBSTRING(person.fullName, 1, CHARINDEX(' ', person.fullName)) end) as first_name,
(CASE WHEN 0 = CHARINDEX(' ', person.fullName)
THEN ''
ELSE SUBSTRING(person.fullName,CHARINDEX(' ', person.fullName), LEN(person.fullName))end) last_name
FROM person
Diese Pflege von Namen wie "Vorname Nachname Z." nehmen und "First Z Last"
SELECT
CASE
WHEN CHARINDEX(' ',name) = 0 THEN name
WHEN CHARINDEX(' ',name) = PATINDEX('% _[., ]%',name) THEN RTRIM(SUBSTRING(name, 1, CHARINDEX(' ',name) + 2))
ELSE SUBSTRING(name,1, CHARINDEX(' ',name))
END [firstname]
,CASE
WHEN CHARINDEX(' ',name) = 0 THEN ''
WHEN CHARINDEX(' ',name) = PATINDEX('% _[., ]%',name) THEN LTRIM(SUBSTRING(name, CHARINDEX(' ',name) + 3,1000))
ELSE SUBSTRING(name,CHARINDEX(' ',name)+1,1000)
END [lastname]
FROM [myTable]
Der einfachste Weg, den ich finden kann, es zu tun ist:
SELECT
SUBSTRING(FullName, 1, CHARINDEX(' ', FullName) - 1) AS FirstName,
REVERSE(SUBSTRING(REVERSE(FullName), 1, CHARINDEX(' ', REVERSE(FullName)) - 1)) AS LastName
FROM
[PERSON_TABLE]
Hier
Ich bevorzuge diese Lösung, da es den zweiten Vornamen aus dem vollständigen Namen entfernt –
Das ist meine Lieblingsantwort auch. Wenn Sie möchten, dass Ihr Vorname auch den zweiten Vornamen enthält (wenn Sie berücksichtigen, dass der Nachname ein einzelnes Nomen ist), können Sie Folgendes tun: 'REPLACE (FullName, REVERSE (SUBSTRING (REVERSE (FullName) , 1, CHARINDEX ('', REVERSE (FullName)) - 1)), '') AS Vorname – TheWanderingMind
ist eine aufwendigere Lösung mit einer SQL-Funktion:
getFirstName
CREATE FUNCTION [dbo].[ufn_GetFirstName]
(
@FullName varchar(500)
)
RETURNS varchar(500)
AS
BEGIN
-- Declare the return variable here
DECLARE @RetName varchar(500)
SET @FullName = replace(replace(replace(replace(@FullName, '.', ''), 'Mrs', ''), 'Ms', ''), 'Mr', '')
SELECT
@RetName =
CASE WHEN charindex(' ', ltrim(rtrim(@FullName))) > 0 THEN left(ltrim(rtrim(@FullName)), charindex(' ', ltrim(rtrim(@FullName ))) - 1) ELSE '' END
RETURN @RetName
END
GetLastName
CREATE FUNCTION [dbo].[ufn_GetLastName]
(
@FullName varchar(500)
)
RETURNS varchar(500)
AS
BEGIN
DECLARE @RetName varchar(500)
IF(right(ltrim(rtrim(@FullName)), 2) <> ' I')
BEGIN
set @RetName = left(
CASE WHEN
charindex(' ', reverse(ltrim(rtrim(
replace(replace(replace(replace(replace(replace(@FullName, ' Jr', ''), ' III', ''), ' II', ''), ' Jr.', ''), ' Sr', ''), 'Sr.', '')
)))) > 0
THEN
right(ltrim(rtrim(
replace(replace(replace(replace(replace(replace(@FullName, ' Jr', ''), ' III', ''), ' II', ''), ' Jr.', ''), ' Sr', ''), 'Sr.', '')
)) , charindex(' ', reverse(ltrim(rtrim(
replace(replace(replace(replace(replace(replace(@FullName, ' Jr', ''), ' III', ''), ' II', ''), ' Jr.', ''), ' Sr', ''), 'Sr.', '')
))) ) - 1)
ELSE '' END
, 25)
END
ELSE
BEGIN
SET @RetName = left(
CASE WHEN
charindex(' ', reverse(ltrim(rtrim(
replace(replace(replace(replace(replace(replace(replace(@FullName, ' Jr', ''), ' III', ''), ' II', ''), ' I', ''), ' Jr.', ''), ' Sr', ''), 'Sr.', '')
)))) > 0
THEN
right(ltrim(rtrim(
replace(replace(replace(replace(replace(replace(replace(@FullName, ' Jr', ''), ' III', ''), ' II', ''), ' I', ''), ' Jr.', ''), ' Sr', ''), 'Sr.', '')
)) , charindex(' ', reverse(ltrim(rtrim(
replace(replace(replace(replace(replace(replace(replace(@FullName, ' Jr', ''), ' III', ''), ' II', ''), ' I', ''), ' Jr.', ''), ' Sr', ''), 'Sr.', '')
))) ) - 1)
ELSE '' END
, 25)
END
RETURN @RetName
END
ANWENDUNG:
SELECT dbo.ufn_GetFirstName(Fullname) as FirstName, dbo.ufn_GetLastName(Fullname) as LastName FROM #Names
Möglicherweise haben Sie Probleme, wenn die Vollständiger Name enthält kein Leerzeichen. die ganze Fullname Unter der Annahme, geht es Familienname, wenn kein Platz ist und Vorname wird ein leerer String, dann können Sie diese verwenden:
SELECT
RTRIM(LEFT(FullName, CHARINDEX(' ', FullName))) AS FirstName,
SUBSTRING(FullName, CHARINDEX(' ', FullName) + 1, 8000) AS LastName
FROM
MyNameTable;
Der Code funktioniert unten mit Nachname, Vorname M Name-Strings. Ersetzen Sie "Name" durch Ihren Namen String Spaltenname. Da Sie eine Periode als letztes Zeichen haben, wenn es eine mittlere Initiale gibt, würden Sie die 2en durch 3en in jeder der Zeilen (2, 6 und 8) ersetzen - und "RECHTS (Name, 1)" in "RECHTS" ändern (Name, 2)“in Zeile 8.
SELECT SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1) LastName ,
CASE WHEN LEFT(RIGHT(Name, 2), 1) <> ' '
THEN LTRIM(SUBSTRING(Name, CHARINDEX(',', Name) + 1, 99))
ELSE LEFT(LTRIM(SUBSTRING(Name, CHARINDEX(',', Name) + 1, 99)),
LEN(LTRIM(SUBSTRING(Name, CHARINDEX(',', Name) + 1, 99)))
- 2)
END FirstName ,
CASE WHEN LEFT(RIGHT(Name, 2), 1) = ' ' THEN RIGHT(Name, 1)
ELSE NULL
END MiddleName
ich denke, unter Abfrage hilfreich seinen Vornamen und Nachnamen von Fullnamen zu spalten, selbst wenn es nur Vorname ist. Zum Beispiel: 'Philip John' kann in Philip und John aufgeteilt werden. Aber wenn es nur Philip gibt, wegen des charIndex von Space ist 0, wird es Ihnen nur geben ".
Versuchen Sie den folgenden.
declare @FullName varchar(100)='Philp John'
Select
LTRIM(RTRIM(SUBSTRING(@FullName, 0, CHARINDEX(' ', @FullName+' ')))) As FirstName
, LTRIM(RTRIM(SUBSTRING(@FullName, CHARINDEX(' ', @FullName+' ')+1, 8000)))As LastName
Ich hoffe, dies wird Ihnen helfen.:)
- 1. Suchdatenbank nach Vor- und Nachname
- 2. gDaten: Konto (Selbstkontakt) Vor- und Nachname
- 3. Jmeter Bohnenschale Skript - Polnisch Vor- und Nachname
- 4. Django, Benutzer mit Vor- und Nachname registrieren?
- 5. Abrufen nur Vor- und Nachname von Personen in DBpedia
- 6. Aktualisieren von Vor- und Nachname während der Registrierung - Django CMS
- 7. PowerShell - Rückgabewert von AD Vor- und Nachname des Benutzers
- 8. MySQL Group_concat und concat Nachname, Nachname und Titel
- 9. Suche nach Vorname und Nachname auf Excel
- 10. SQLAlchemy - Volllade-Instanz vor dem Trennen
- 11. So erhalten Sie Vor- und Nachname von String mit vollem Namen
- 12. Trennen von Sitzungen und Karten
- 13. Wie Abfrage SQL Server 2008-Datenbank für Vor- und Nachname und Reihenfolge nach Relevanz?
- 14. Geschäftsregeln von Geschäftsprozessen trennen
- 15. "Nachname, Vorname" -> "Vorname Nachname" in serialisierten Strings
- 16. Zeige 'Einfügung' und 'Nachname' in Listfield ASPX
- 17. Laravel - Wie man Vor- und Nachname von getrennten Feldern nimmt und sie in der Namensspalte in db speichert?
- 18. MXML und Actionscript trennen
- 19. Wie bekomme ich E-Mail und Nachname von Kontakten?
- 20. Umgekehrte Reihenfolge von Vornamen und Nachname in SQL-Spalte
- 21. Separate Vorname und Nachname von Fullname String in C#
- 22. Mischen und trennen ähnliche Zeichenfolgen
- 23. Vorname Nachname Validierung asp.NET
- 24. Ausgabe mit Informationen und Trennen
- 25. FileSystemWatcher und Netzwerk trennen?
- 26. Verbinden und Trennen von String-Eingängen
- 27. Trennen von Windows Forms und Klassen C#
- 28. Verbinden und Trennen von USB-Geräten programmgesteuert
- 29. Formatierung ungewöhnliche (Vorname und Nachname) Zeichenketten in R
- 30. Zeichenkette für Zeichenkette trennen und durch Komma trennen in C#
Können Sie ein Beispiel für Daten zeigen? – raym0nd
Gibt es immer einen Platz? Was passiert mit "Prinz", "Alf" oder "Madonna"? Wie wäre es mit 'Philip Seymour Hoffman' oder' James van der Beek'? –
Wirklich, das ist eine ** sehr ** schwierige Aufgabe. Um es richtig zu machen, brauchst du ein Namen-Wörterbuch oder etwas, um deine Eingabe zu vergleichen und dann zu entscheiden, wie man sie trennt. Es ist eine wirklich komplexe Sache zu tun – Lamak