2017-02-10 366 views
1

我有一列有个人全名,包括中间首字母。我试图将全名分隔为名和姓,并删除中间名/首字母。我的数据库中的一些名称有一个中间名/首字母,有些则没有。下面的查询是我正在使用的,他们都只做了一半的把戏。SQL Server:分开名字和姓氏,并将中间名字初始化为两列

查询#1:返回所述第一名称和中间名/在第2列的初始和消除了姓:

FirstName = LEFT(fullname, CHARINDEX(' ', fullname)), 
LastName = RIGHT(fullname, CHARINDEX(' ', REVERSE(fullname))) 

查询#2:返回所述第一名称和结合了中间名/初始用姓氏(两者之间有空格):

FirstName = left(fullname,CHARINDEX(' ',fullname)), 
LastName = SUBSTRING(fullname, CHARINDEX(' ',fullname)+1,LEN(fullname)-(CHARINDEX(' ',fullname)-1)) 
+0

请记住,你会遇到姓氏为多个姓氏的人的问题,例如van der Beek或del Rio等。如果需要,你可以将常见问题作为单独案例处理。 –

回答

2

这个怎么样?

select left(fullname, charindex(' ', fullname + ' ') - 1) as firstname, 
     right(fullname, charindex(' ', reverse(fullname) + ' ') - 1) as lastname 

注意这处理的名称中没有空格而没有提供错误。但是,名字和姓氏是相同的(完整字符串)。目前还不清楚你想在这种情况下做什么。

+0

这真棒!谢谢戈登非常感谢 – Benjo