2014-10-29 173 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