如果我有一个包含全名的列的表,例如:
fullname
------------
Joe Bloggs
Peter Smith
Mary Jones and Liz Stone
Run Code Online (Sandbox Code Playgroud)
如何使用SQL从全名列中的每个条目重试名字和姓氏.我并不担心我的例子中的第三个名字中的第二个名字,即Liz Stone.
所以基本上要检索
Firstname
---------
Joe
Peter
Mary
Lastname
--------
Bloggs
Smith
Jones
Run Code Online (Sandbox Code Playgroud)
Tim*_*sen 13
这是一个SQL Server 2016之前的方法,它使用基本的字符串函数来隔离名字和姓氏.
SELECT SUBSTRING(fullname, 1, CHARINDEX(' ', fullname) - 1) AS Firstname,
SUBSTRING(fullname,
CHARINDEX(' ', fullname) + 1,
LEN(fullname) - CHARINDEX(' ', fullname)) AS Lastname
FROM yourTable
Run Code Online (Sandbox Code Playgroud)
请注意,此解决方案假定该fullname列仅包含单个名字和单个姓氏(即没有中间名,缩写等).
SELECT CASE
WHEN CHARINDEX(' ', FullName) > 0
THEN SUBSTRING(FullName, 1, LEN(FullName) - CHARINDEX(' ', REVERSE(FullName)))
ELSE ''
END AS FirstName,
CASE
WHEN CHARINDEX(' ', FullName) > 0
THEN REVERSE(SUBSTRING(REVERSE(FullName),
1,
CHARINDEX(' ', REVERSE(FullName)) - 1))
ELSE FullName
END AS LastName
FROM(VALUES('Mary Anne Bloggs'), ('Joe Bloggs'), ('Bloggs')) AS T(FullName);
Run Code Online (Sandbox Code Playgroud)
此版本检查全名中是否有空格进行分割。如果没有,则将名字设置为空字符串,并将全名放入姓氏中。另外,当有多个空格时,使用反向来拆分最后一个空格
小智 -3
您可以使用,
STRING_SPLIT (string , separator)
Run Code Online (Sandbox Code Playgroud)