2014-09-04 70 views
0

我需要在SQL中將行(包含空格)解析爲兩個不同的列。該行看起來像:如何將SQL中的行解析爲列(分隔符空間)

全名

約翰梅爾

朗詹寧斯

唐娜Fraye

邁克爾·摩爾

因此,預期的結果是:

名稱

約翰

唐娜

邁克爾

邁耶

詹寧斯

Fraye

摩爾

我該怎麼辦,在SQL?

回答

1

如果你有這樣名字的要求應該是字符串前第一空間和休息的一切接下來應該去爲姓,你可以更新兩列:

Update T 
Set T.FirstName = Left(ltrim(rtrim(FullName)), CHARINDEX(' ',ltrim(rtrim(FullName)))) 
    ,T.LastName = Right(ltrim(rtrim(FullName)),len(FullName)- CHARINDEX(' ',ltrim(rtrim(FullName)))) 
From Test T 

Check Demo here..

1

如果只有過1空間/ 2名,你不必應付像文森特梵高,那麼子的組合名稱和charindex應該做的。

select substring(fullname, 1, charindex(' ', fullname)) as name, 
     substring(fullname, charindex(' ', fullname)+1, len(fullname)-charindex(' ', fullname)) as surname 
from tbl 
1

這不包括具有相同名字和姓氏的人(即約翰·約翰),但將工作休息。不推薦,但是是不同的解決方案。

select left(fullname, charindex(' ',fullname)) Name, 
    replace(fullname,left(fullname, charindex(' ',fullname)),'') Surname 
from names 

Fiddle