sql - 如何将fullname拆分为名字和姓氏

the*_*ner 7 t-sql

如果我有一个包含全名的列的表,例如:

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列仅包含单个名字和单个姓氏(即没有中间名,缩写等).

  • 将`和`行分成两个记录可能需要一个自定义函数.如果您确实有这样的边缘情况,我建议在将数据带入SQL Server之前清理数据. (2认同)

Col*_*lin 5

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)

  • 这应该是一个评论。如果您想将此作为答案发布,您应该发布一个实际示例。OP将如何访问姓氏? (3认同)