2014-09-04 81 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