2014-10-29 207 views
0

您好,我需要提取姓氏,母親姓氏和名稱以及其主要由拉丁名字組成的名稱和名稱,所以大多數人都有2個名字+,我找到了一種方法使用下面的代碼。 我的問題是如果有更好的方法來做到這一點?從表格中提取姓氏,姓氏和姓氏

Declare @t table ([Name] varchar(100)) 
    insert into @t (Name) 
    VALUES ('Gomez Flores Roberto'), ('DELGADO PEREZ MARIA TERESA'), ('MARTINEZ VELASCO MARTIN AGUSTIN DOMINGO'), ('BURGOS JIMENEZ ERNESTO') 
    SELECT 
    substring(name,0,charindex(' ',name)) as LasName 
    ,substring(substring(name, charindex(' ',name)+1,(len(name)- charindex(' ',name))),0,charindex(' ',substring(name, charindex(' ',name)+1,(len(name)- charindex(' ',name))))) MiddleName 
    ,substring(substring(name, charindex(' ',name)+1,(len(name)- charindex(' ',name))), charindex(' ',substring(name, charindex(' ',name)+1,(len(name)- charindex(' ',name))))+1,(len(substring(name, charindex(' ',name)+1,(len(name)- charindex(' ',name))))- charindex(' ',substring(name, charindex(' ',name)+1,(len(name)- charindex(' ',name)))))) as Name 
    FROM @t 

感謝您對您的時間和幫助

+3

最好的辦法是存儲在單獨的列中的值 - 名字,姓氏等 – TGH 2014-10-29 01:20:43

+1

沒有更好的方式來做到這一點,因爲你將有違反各種異常的你現有的規則。 「Dennis de la Mosely-Williams」和「Oscar van der Nutz III」,就是這樣。正是出於這個原因,數據清理工具非常昂貴。 – 2014-10-29 02:58:04

+0

@AaronBertrand感謝你在完成這件事之後正在處理那些問題。 – lGansito 2014-10-29 19:59:45

回答

1

這可能是有益的計數@ t.name每個值有多少名了。例如Gomez Flores Roberto有3個,DELGADO PEREZ MARIA TERESA有4個。從他們那裏獲得最大數量會告訴你如何可能需要的字段,並且允許你在一定數量之後做一些數據清理或截斷。 發現這篇文章可能會有所幫助。

http://www.mssqltips.com/sqlservertip/3233/name-parsing-with-sql-server-functions-and-tsql-programming/

+0

謝謝,這是一個非常好的主意 – lGansito 2014-11-07 20:43:04