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

时间:2015-01-20 02:23:43

标签: c# sql-server excel excel-vba vba

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

Anna Smith
Anna.Smith
Anna_Smith
Smith Anna

我在上面的情况下我能够弄清楚Anna Smith,Anna.smith和Anna_Smith是同一个人。但我无法找到任何可以帮助我说史密斯安娜和安娜史密斯一样的逻辑。

目前正在使用MS-SQl 以下是逻辑

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

我删除了所有字符,如

  

“。”,“;”,“”

在名称中出现并将它们作为一个名称连接起来 因此Anna Smith,Anna.Smith,Anna_Smith将全部转为AnnaSmith。 RemoveSpecialChars - 是用户定义的函数

有什么方法可以说出安娜史密斯和史密斯安娜的名字相同吗?目前正在开发MS-SQl。 Excel,C#和VBA中给出的解决方案也很好。

谢谢, Sachi

1 个答案:

答案 0 :(得分:4)

正如罗恩所说,分裂这些词可能是一种简单的方法。 (这是在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();

然后只进行比较。