识别类似的名字,例如:“AAA BBB CCC”和“BBB AAA CCC”是相同的人

我目前正在解决一个问题。 我有一列名字。 以下是情况

Anna Smith Anna.Smith Anna_Smith Smith Anna 

我以上的情况下,我能弄清楚安娜史密斯,安娜。史密斯和安娜史密斯是同一个人。 但我无法find任何可以帮助我说史密斯安娜和安娜史密斯一样的逻辑。

目前使用下面的MS-SQl是逻辑

 select name, isnull(lower(dbo.RemoveSpecialChars(substring(name, 0, charindex('@',name)))),dbo.RemoveSpecialChars(name)) nospacename into #sheet32 from [dbo].['Sheet3 (2)$'] 

我正在删除所有的字符

“。”,“;”,“”

发生在名字内部,并把它们连成一个名字,所以安娜·史密斯,安娜·史密斯,安娜·史密斯都将被转换成安娜史密斯。 RemoveSpecialChars – 是用户定义的函数

有什么办法可以弄清楚安娜史密斯和史密斯安娜是同一个名字吗? 目前正在MS-SQl上工作。 在Excel,C#和VBA中给出的解决scheme也很好。

谢谢,萨奇

正如罗恩提到的那样,分词可能是一个简单的方法。 (这是在C#)

  //String you want to check string names = "Smith Anna"; //Split char[] splitters = { '-', '_', '.',' '}; List<string> result = names.Split(splitters).ToList(); //Sort the list result.Sort(); 

然后只是进行比较。