【问题标题】:Split Name into Last name, First Name, Middle Name in SQL在 SQL 中将名称拆分为姓、名、中间名
【发布时间】:2018-05-05 08:30:24
【问题描述】:

我在下面有一个记录。我想把名字拆分成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

【问题讨论】:

  • 你使用的是什么 DBMS
  • 如果它是一个拉丁名称,如:Iván De Luca Di Natale 或法语:Isaac De la CroixMaurits-jan Kuipers op den Kollenstaart?中间名怎么来的?
  • 很好的问题@丹尼尔
  • 我正在使用 SQL 服务器。名称字段是一个非常常见的名称。没有拉丁或法语名称等。谢谢
  • 哪个版本的 SQL?

标签: sql sql-server


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以这样做;

    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 函数,它有点令人困惑。但是如果你仔细关注它们,逻辑就很简单了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 2021-06-16
      相关资源
      最近更新 更多