将全名拆分为名字和姓氏

use*_*236 3 sql t-sql sql-server

我有一个客户名单,他们的名字是全名。我想创建一个将全名作为参数并分别返回名字和姓氏的函数。如果这是不可能的,我可以有两个单独的函数,一个返回名字,另一个返回姓氏。全名列表包含最多包含三个单词的名称。我想要的是这个:-

  • 当一个全名由两个词组成时。第一个应该是名字,第二个应该是姓氏。
  • 当一个全名由三个词组成时。第一个和中间的单词应该是名字,而第三个单词应该是姓氏。

例子:-

**Full Name**    
John Paul White    
Peter Smith    
Ann Marie Brown    
Jack Black    
Sam Olaf Turner
Run Code Online (Sandbox Code Playgroud)

结果:-

**First Name    Last Name**    
John Paul     White    
Peter         Smith      
Ann Marie     Brown    
Jack          Black    
Sam Olaf      Turner
Run Code Online (Sandbox Code Playgroud)

我搜索并找到了无法按预期工作的解决方案,并希望得到一些建议。

t-c*_*.dk 6

保持简短

DECLARE @t TABLE(Fullname varchar(40))
INSERT @t VALUES('John Paul White'),('Peter Smith'),('Thomas')

SELECT
  LEFT(Fullname, LEN(Fullname) - CHARINDEX(' ', REVERSE(FullName))) FirstName,
  STUFF(RIGHT(FullName, CHARINDEX(' ', REVERSE(FullName))),1,1,'') LastName
FROM
  @t
Run Code Online (Sandbox Code Playgroud)

结果:

FirstName  LastName
John Paul  White
Peter      Smith
Thomas     NULL
Run Code Online (Sandbox Code Playgroud)