在SQL中将名称拆分为姓氏、名和中间名

在SQL中将名称拆分为姓氏、名和中间名,sql,sql-server,Sql,Sql Server,我有下面的记录。我想把名字分成Lname,Fname,MNName 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 Joh

我有下面的记录。我想把名字分成Lname,Fname,MNName

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

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

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

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

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

你可以这样做

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

由于使用了嵌套的replace和charindex函数,所以它不太容易混淆。但如果你密切关注它们,逻辑就相当简单。

你可以这样做

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

由于使用了嵌套的replace和charindex函数,所以它不太容易混淆。但如果你密切关注它们,逻辑就相当简单。

你使用的是什么数据库管理系统?如果它是拉丁名:
Iván De Luca Di Natale
或法语:
Isaac De la Croix
Maurits jan Kuipers op den Kollenstart
?如何获得中间名?非常好的问题@DanielI我正在使用SQL服务器。名称字段是一个非常常见的名称。没有拉丁或法语名字,等等。感谢哪种版本的SQL?您使用的数据库管理系统是什么?如果它是拉丁名,如:
Iván De Luca Di Natale
或法语:
Isaac De la Croix
Maurits jan Kuipers op den Kollenstart
?如何获得中间名?非常好的问题@DanielI我正在使用SQL服务器。名称字段是一个非常常见的名称。没有拉丁或法语名字,等等。感谢哪种版本的SQL?