简体   繁体   English

在SQL中将名称拆分为姓,名,中间名

[英]Split Name into Last name, First Name, Middle Name in SQL

I have a record below. 我在下面有记录。 I want to split the name into Lname, Fname, Mname 我想将名称分为Lname,Fname,Mname

Name
John, David Handsome

Here is my query. 这是我的查询。 I was able to get Lname but not Fname and Mname yet. 我能够获得Lname,但不能获得Fname和Mname。

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

My desired output would be: 我想要的输出将是:

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;

You can do it like this; 你可以这样做;

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

It comes little confusing because of nested replace and charindex functions. 由于嵌套的replace和charindex函数,因此几乎不会造成混淆。 But if you focus on them closely, logic is quite simple. 但是,如果您密切关注它们,逻辑将非常简单。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM