我们有一个客户表(谁没有?),其中包含许多从业务角度来看是重复的记录。我已经能够创建一个 SSIS 包来执行模糊分组,并报告潜在的重复项。
现在,假设我想在有人进入新客户时进行这种分析。这个想法是对客户姓名(可能还有一些其他基本信息,如邮政编码)执行模糊查找,并在继续创建客户表单之前显示潜在的重复项。
这里明显的问题是模糊分组和查找组件是 SSIS 的一部分。如果我想按需运行这些,我必须做一些疯狂的事情,比如将搜索词放在临时表中,运行 SSIS 包,等待它完成,然后从输出表中获取结果。这会很慢,很痛苦,并且有严重的并发问题。
所以,另一个想法是使用全文索引。在尝试它时,它似乎不适合。它无法捕捉到客户名称的细微拼写错误,或者“Company”与“Corporation”与“Co.”或“Anderson”与“Andersen”以及其他此类变体中不同的名称。
有什么东西可以让 T-SQL 的模糊分组/匹配具有灵活性吗?我可以通过模糊查找来保存标记,但看起来我仍然需要重新实现大部分匹配算法才能使用它们。
过去,我在 .Net CLR 函数中构建了一个“模糊搜索”。该函数的调用方式与调用用户定义函数的方式相同。
例如,
只会返回与输入名称有 80% 相似度的客户。
% 匹配基于将一个值转换为另一个值所需的更改次数,而不是不同的字符数。我们用它来比较地址,发现这更有效,因为使用了许多街道缩写。
这是我用来比较字符串的代码。我很久以前就这样做了,以至于我不记得如何部署它了,尽管快速搜索会向您展示许多有关如何创建 SQL CLR 函数的文章