数据质量 - SOUNDEX是解决方案吗?

时间:2014-03-16 09:34:22

标签: sql sql-server vb.net

我为一个名字严重的数据质量问题的组织工作。有15个数据库包含有关人员的信息。例如:

Database 1
Name=Fre&d Blo-ggs DOB 01/01/1980

Database 2
Name=Freddy Bloggs DOB 01/01/1980

如果用户使用我的搜索工具搜索Fred Bloggs,那么我希望找到这两个记录。我在考虑这样的事情:

SELECT * FROM Person WHERE Soundex('Fred Bloggs') = Soundex('Fre&d Blo-ggs')

建议像这样使用Soundex而不是使用像这样的替换语句:

select Replace(Replace(Replace(Name,',',''),'&',''),'@') from Person
 where Replace(Replace(Replace(Name,',',''),'&',''),'@') = @Name

@Name是传入的变量。有更好的方法吗?例如使用正则表达式? Soundex会影响性能。

3 个答案:

答案 0 :(得分:2)

好主意。我不建议使用它。我想那是&#34; John Right&#34;和#34; John Write&#34;不一样,即使他们听到同样的话。我的意思是,最重要的是,你想要比较的是......如果你想比较名称声音是否相同,那么SOUNDEX就可以了。< / p>

但是,我建议以某种方式纠正您的数据。这将是一个真正的解决方案,虽然我可以想象这不是一个简单的解决方案。

希望我帮忙!

答案 1 :(得分:2)

如果soundex优于正则表达式取决于您的数据。例如,针对不同语言有不同的soundex版本。你必须检查你的数据,这是更好的..

当然,soundex确实会像您正在调用的任何其他附加功能一样影响性能。如果性能成为问题,我建议添加一个包含已经计算的soundex或规范化名称的附加列,并在其上创建索引。

根据自己的经验,我认为标准化/简化的搜索标准是例如姓氏,名字和出生日期的部分应该足以让所有人,但不是太多,所以用户可以决定他真正想要选择哪个人。

答案 2 :(得分:1)

Soundex不会帮助你。如果错误地在名称中出现辅音,你就会陷入困境。

你更好地选择字符串距离并指定一个百分比。一种模糊匹配。

使用levenshtein编辑距离算法查看下面的模糊匹配链接。 Levenshtein edit distance - MS SQL SERVER