我有一个遗留数据库: firstname,lastname,address1,address2,address3,address4,zipcode 数据分散在不同的列之间,没有一致性,例如实际的邮政编码可以在任何列中,并且存在大量错别字。
有没有办法在SP中使用类似SOUNDEX / DIFFERENCE之类的东西来遍历所有内容并返回可能重复的有序列表? [它不需要很快]
答案 0 :(得分:3)
如果您使用的是SQl Server 2005或更高版本,则可以在SSIS中使用模糊匹配来执行此任务。我发现这样做的效果明显好于寻找soundex匹配或写我自己的sql scode以寻找近似匹配。
答案 1 :(得分:1)
如果你只是希望可能重复,checksum / binary_checksum函数会给你一个很好的指示,虽然它只是一个32位的哈希,所以取决于你的数据集大小你可能会得到一些误报。 checksum()不区分大小写,binary_checksum()区分大小写。这将为您的表中的每条记录提供32位哈希值:
select checksum(*), binary_checksum(*)
from tableName;
您可以对具有不同ID值(或不同名称值等的记录)的重复哈希进行自联接匹配,具体取决于数据集中给定记录的唯一性。看起来像这样:
select id, checksum(*)
from tableName a
join tableName b
on a.checksum(*) = b.checksum(*)
and a.id <> b.id;
这两个函数可以获取参数的任何列列表并提供散列,因此如果您只想散列fName,lName,address等列而不是整个记录,那么您的校验和函数将如下所示:
checksum(a.fName, a.lName, a.address, ...)
而不是上面例子中的校验和(*)。