将名称拆分为姓氏,名字,SQL中的中间名

时间:2017-11-21 18:48:21

标签: sql sql-server

我有以下记录。我想将名称拆分为Lname,Fname,Mname

Name
John, David Handsome

这是我的查询。我能够得到Lname但不是Fname和Mname。

SELECT 
NAME, 
LEFT(NAME,CHARINDEX(',',NAME)-1)    AS LNAME
FROM TABLE

我想要的输出是:

Name                    Lname   Fname   Mname
John, David Handsome    John    Daivd   Handsome

2 个答案:

答案 0 :(得分:0)

如果名称的格式保持不变,请使用以下内容:

select name,LEFT(NAME,CHARINDEX(',',NAME)-1)    AS LNAME, regexp_substr(name,'[^ ]+',1,2)  as fname,regexp_substr(name,'[^ ]+',1,3) mname from table;

答案 1 :(得分:0)

你可以这样做;

SELECT 
LEFT(NAME,CHARINDEX(',',NAME)-1) AS LNAME,
LEFT(REPLACE(NAME,LEFT(NAME,CHARINDEX(',',NAME)+1),''),CHARINDEX(' ',REPLACE(NAME,LEFT(NAME,CHARINDEX(',',NAME)+1),''))-1) AS FNAME,
REPLACE(REPLACE(NAME,LEFT(NAME,CHARINDEX(',',NAME)+1),''),LEFT(REPLACE(NAME,LEFT(NAME,CHARINDEX(',',NAME)+1),''),CHARINDEX(' ',REPLACE(NAME,LEFT(NAME,CHARINDEX(',',NAME)+1),''))-1),'') AS MNAME

由于嵌套替换和charindex函数,它几乎没有混淆。但如果你密切关注它们,逻辑很简单。