这不是SQL Server特定的问题;但这里可能有特定于tSQL的选项。
我有一堆客户详细信息;他们中的许多人取消并辞职以获得他们的服务。他们获得了一个全新的账户;我们的数据验证最多是粗略的;所以他们经常输错电子邮件地址或其他数据。
问题分为两部分:
首先;我有信息,如姓名,电子邮件,信用卡的最后4,邮政编码,电话号码。是否有算法/过程我可以查看我的数据集并查找常见的重复池,以便我可以确定数据的一些手动特征,这些特征往往是重复客户的“问题”项目 - 即80%的时间电子邮件是“相似的”,邮政编码是相同的,它是一个重复的客户(基于我的人类匹配技能)?
二;我如何表达数据集之间的相似性 - 即如果5个字段中的3个匹配,则有一个称为匹配的项目?所有不同数据点之间的某种相似性指数?我知道我可以在某种程度上使用soundex的名字......不太确定电子邮件地址。
所以,我对快速和肮脏的解决方案都感兴趣(我今晚正在进行分析;但我也对解决这个问题的'正确'方式非常感兴趣。)这两个答案都将获得我的爱和尊重。 =)
答案 0 :(得分:3)
不是T-SQL,但SSIS有一些答案:Fuzzy Lookup Transformation,Fuzzy Grouping Transformation。此MSDN文章介绍了如何使用它:Fuzzy Lookups and Groupings Provide Powerful Data Cleansing Capabilities,以下是有关该主题的视频:MSDN TV: Data Cleansing Applications with SQL Server Integration Services。
还有第三方解决方案,例如Red-Gate的Data Cleanser。尽管如此,他们仍然使用SSIS,因为这是一个更合适的工具。
您还应该阅读Levenshtein distance,已经有许多公共现成的T-SQL实现,以及可在SQL Server中使用的CLR实现。只需Google for them。
答案 1 :(得分:0)
我还建议查看Jaro-Winkler模糊匹配算法进行查询,并找到其CLR实现here
这似乎适用于较小量的文本字符串匹配