Tsql 检查T-SQL中比较两个字符串的输入错误

Tsql 检查T-SQL中比较两个字符串的输入错误,tsql,pattern-matching,data-scrubbing,Tsql,Pattern Matching,Data Scrubbing,我们制定了一系列确定重复联系人记录的业务规则,这些规则的基础是首先检查相同姓名,然后比较其他字段,如电话号码、电子邮件、电话等 问题是只有一小部分记录被捕获并自动清除/合并 为了捕获更多记录,我希望在联系人姓名中包括或检查拼写错误(例如Michael=Micheal) 是否有一个好的函数可以用来检查输入错误,以便返回更准确的结果?我认为一个函数可以通过比较两个字符串来寻找单个字符的差异。请记住,大多数字符串相似性度量算法都是计算密集型的,并且,根据手头的工作量,T-SQL可能是一个糟糕的选择,性

我们制定了一系列确定重复联系人记录的业务规则,这些规则的基础是首先检查相同姓名,然后比较其他字段,如电话号码、电子邮件、电话等

问题是只有一小部分记录被捕获并自动清除/合并

为了捕获更多记录,我希望在联系人姓名中包括或检查拼写错误(例如Michael=Micheal)


是否有一个好的函数可以用来检查输入错误,以便返回更准确的结果?我认为一个函数可以通过比较两个字符串来寻找单个字符的差异。

请记住,大多数字符串相似性度量算法都是计算密集型的,并且,根据手头的工作量,T-SQL可能是一个糟糕的选择,性能方面也是如此

代替字符串相似性度量本身,考虑<强>散列函数< /强>,特别是保留单词的主要“结构”。散列码的优点是,它们只计算一次,只使用一个字符串作为输入,然后可以在[TSQL]过滤器中使用简单的相等谓词(与相似性度量不同,相似性度量意味着对每个可能的引用字符串运行算法)。一个看似合理的散列码建议是SOUNDEX,它恰好特别适合于人名和公司名的典型变化,并且作为一个函数“本机”实现

可能更可取的做法是计算姓名字段中每个单词的soundex代码,例如为“查尔斯·达尔文”等输入生成两个代码,为“让·雅克·卢梭”等输入生成三个代码。为了提高性能,您可能需要找到一种将姓氏与给定姓名区分开来的方法,为了方便您的过滤条件


如果您更喜欢使用字符串相似性方法,我发现,或对于处理诸如打字错误之类的小变化,效果相当不错。与Soundex一样,您仍然可以考虑单独处理单词,这将引入处理给定名称项的多个值的难度,但也允许更主动地处理具有名称的典型情况,其中一些实例是顺序名称,然后是姓氏,而其他实例则是相反顺序。(或者部分名称被省略或缩写)。

我使用Levenstein距离对我来说非常有用。如果OP感兴趣,我使用C#而不是TSQL的算法。