【问题标题】:how to split name into first and last name in SQL如何在SQL中将名称拆分为名字和姓氏
【发布时间】:2017-04-17 14:40:11
【问题描述】:

我有一个包含名字和姓氏的表格,如下所示

First_Name LAST_NAME

John       Milano
Garry      Sanders 
           Barr, Jerome P
           Venti, Louis 

我需要更正一些在 Last_name 列中具有完整名称的行。我想要的输出是:-

First_Name LAST_NAME

John       Milano
Garry      Sanders 
Jerome     Barr
Louis      Venti

提前致谢!

【问题讨论】:

  • 确保在修复现有记录之前防止再次发生。

标签: sql sql-server sql-server-2014


【解决方案1】:

这会让你接近,但有几点需要注意:1) 一些名字有两个词——“Mary Ann”等。所以,你可能想保留这些词。 2) 您只想更改 LAST_NAME 列包含逗号的行。

UPDATE MyTable
    SET First_Name = LTRIM(SUBSTRING(LAST_NAME, CHARINDEX(',', LAST_NAME) + 1, 100)),
        LAST_NAME = LTRIM(RTRIM(SUBSTRING(@name, 0, CHARINDEX(',', @name))))
WHERE CHARINDEX(',', LAST_NAME) > 0

因此,您仍将“Jerome P”作为名字。如果您想将名字限制为一个单词,您将不得不做更多的事情。这应该有效:

UPDATE MyTable
    SET First_Name = LTRIM(RTRIM(SUBSTRING(@name, 0, CHARINDEX(' ', @name))))
WHERE CHARINDEX(' ', First_Name) > 0

【讨论】:

    【解决方案2】:

    您可以在 CHARINDEXLEFT 中使用 case 表达式

    select
        First_Name 
        ,case
             when charindex(',',LAST_NAME) > 1 then left(LAST_NAME,charindex(',',LAST_NAME) - 1)
             else LAST_NAME
         end as LAST_NAME
    From YourTable
    

    示例

    declare @var varchar(64) = 'Barr, Jerome P'
    
    select 
    case
        when charindex(',',@var) > 1 then left(@var,charindex(',',@var) - 1)
        else @var
    end
    

    【讨论】:

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