首页 > 解决方案 > 如何从这个全名中解析出名字、姓氏和中间名

问题描述

如何从这个全名中解析出名字、姓氏和中间名

例子

 Fullname 
 ------------------
 Jose,KENNETH;N

标签: tsqlselectsql-server-2012

解决方案


APPLY是你的朋友。

询问:

DECLARE @string VARCHAR(1000) = 'Jose,KENNETH;N'

SELECT 
  FullName  = @string,
  FirstName = SUBSTRING(@string,0,a.pos),
  LastName  = SUBSTRING(@string,a.pos+1,b.pos-a.pos-1),
  Middle    = SUBSTRING(@string,b.pos+1,8000)
FROM        (VALUES(CHARINDEX(',',@string)))       AS a(pos)
CROSS APPLY (VALUES(CHARINDEX(';',@string,a.pos))) AS b(pos);

结果:

FullName           FirstName  LastName  Middle
------------------ ---------- --------- --------
Jose,KENNETH;N     Jose       KENNETH   N

根据 OP 的评论更新

不使用APPLY

SELECT 
  FullName  = @string,
  FirstName = SUBSTRING(@string,0,CHARINDEX(',',@string)),
  LastName  = SUBSTRING(@string,CHARINDEX(',',@string)+1,CHARINDEX(';',@string,CHARINDEX(',',@string))-CHARINDEX(',',@string)-1),
  Middle    = SUBSTRING(@string,CHARINDEX(';',@string,CHARINDEX(',',@string))+1,8000);

推荐阅读