2015-09-11 74 views
-6

我有類似值的列:拆分姓氏和名字使用SQL Server

Full Name 
---------------- 
X-y, z C 
CLOSE, Test G. 
CMN, DEV S. 
Micheal Land 

我需要通過以下方式

Last_Name First_Name Middle-Name 
----------------------------------- 
X-y   Z    C 
CLOSE   Test   G 
CMN   DEV   S 

邁克爾土地

+1

什麼是分裂的邏輯是什麼? – DarkKnight

+0

你真的需要一條線上的所有輸出嗎?你有嘗試過什麼嗎?搜索任何東西? – HABO

回答

0

如果輸出不尋找單行代碼.. 試試這個..

FIDDLE DEMO

declare @x varchar(20) ='x-yDFGD, DFGDFA GDDb' 
    ,@lastname varchar(20), 
    @FirstName varchar(20), 
    @middleName varchar(20) 

    if charindex(',',@x) >0 
    begin 
     set @lastname =left(@x, charindex(',',@x)-1) 
     set @x =Ltrim(Rtrim(substring(@x,charindex(',',@x)+1, len(@x)))) 
     Set @firstName =left(@x, charindex(' ',@x)-1) 
     SET @middleName =substring (@x, charindex(' ',@x) +1,LEN(@X)) 
     select @lastname as [LastName], @firstName as [FirstName], @middleName as [MiddleName] 
    end 
    ELSE 
    BEGIN 
     set @lastname =left(@x, charindex(' ',@x)-1) 
     SET @firstName =substring (@x, charindex(' ',@x) +1,LEN(@X)) 
     select @lastname as [LastName], @firstName As [FirstName] 
    END 
0
Create table #temp ([Full Name] varchar(100)) 

insert into #temp 
select 'X-y, z C' 
union all 
select 'CLOSE, Test G.' 
Union all 
select 'CMN, DEV S.' 
union all 
select 'Micheal Land' 
UPDATE #temp SET [Full Name]=REPLACE([Full Name],', ',',') 
select substring([Full Name],0,CASE CHARINDEX(',',[Full Name]) WHEN 0 THEN LEN([Full Name]) ELSE CHARINDEX(',',[Full Name]) END) Last_Name, 
CASE CHARINDEX(',',[Full Name]) WHEN 0 THEN '' ELSE substring([Full Name],CHARINDEX(',',[Full Name])+1,-CHARINDEX(',',[Full Name])+CHARINDEX(' ',[Full Name])) END First_Name, 
CASE CHARINDEX(',',[Full Name]) WHEN 0 THEN '' ELSE substring([Full Name],CHARINDEX(' ',[Full Name])+1,LEN([Full Name])) END [Middle-Name] from #temp