如何在SQL中将名称拆分为名字和姓氏

时间:2017-04-17 14:40:12

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

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

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

提前致谢!

2 个答案:

答案 0 :(得分:2)

这会让你接近,有一些警告: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

所以,你将拥有"杰罗姆P"作为第一个名字仍然。如果要将名字限制为单个单词,则必须多做一些。这应该有效:

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

答案 1 :(得分:1)

您可以使用包含CHARINDEXLEFT

的案例表达式
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