SQL Server - 在名称中查找匹配项

时间:2012-02-20 03:12:50

标签: sql sql-server sql-server-2005 tsql full-text-search

我正在使用SQL Server 2005,我有一些名字进入系统,我想将它们与一个表进行比较以寻找匹配。关于如何匹配这样的事情的任何建议:

传入的价值类似于“J.R. Thompson Corporation” 而价值是数据库中的“The Jim Ryan Thompson Company”。

2 个答案:

答案 0 :(得分:0)

简单地说 - 它无法完成。即使规范化地址也很复杂,并且您只遵循特定的规则(例如,Str。for Street)。 15年前,我在德国做了一个项目,地狱爆发了,所以说 - 因为有些地方有特殊规定(例如,m 4 =一个城市的有效地址,因为内城是quandrants,或者是'Strasse des 14. July Appartement 3“打破了我们的”第一个数字是街道名称“规则”的结束。

整个事情变得发牢骚 - 在你的例子中“J.R.”和“吉姆瑞恩”可能是也可能不一样。您可以设置一些规则,并且通过地址可以轻松实现(相同的地址意味着最终名称匹配可以更宽松),但一般来说这不是一种可行的方法。即使是拼写纠正也无法实现。如果没有具有互联网访问权限的人工智能使用谷歌来查明它是否匹配,就没有办法规范化。是的,您可能会获得20%或30%的命中率,但这会让您左右发生TON错误,并且从业务角度来看可能不会无用。

您至少需要一个标准化标识符来确定选择。门牌号码,电话号码,任何可以更容易标准化的东西,然后为名称匹配算法提供了一个附加功能。

答案 1 :(得分:-1)

没有进行全文搜索(设计用于执行这些操作),您可以通过简单的方式完成此操作,只需使用%通配符替换空格和句点并将%放在开头和结尾处即可。字符串:

DECLARE @input VARCHAR(50) = 'J.R. Thompson Corporation'

SELECT * 
FROM Company 
WHERE Name LIKE '%' + REPLACE(REPLACE(@input, '.', '%'), ' ', '%') + '%'

请务必注意,在您拥有前导%符号的情况下进行任何类型的LIKE搜索都不会从该列的索引中受益。

请注意,这仍然不会像你的例子那样选择像“公司”这样的意思“公司”。