2012-02-20 105 views
2

我使用SQL Server 2005中的比赛,我已经进入一个系统的名字,我想他们比对表,以寻找匹配。有关如何匹配如下内容的任何建议:SQL服务器 - 寻找名字

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

+1

您需要设置全文搜索同义词:http://msdn.microsoft.com/en-us/library/ms142571.aspx – 2012-02-20 03:29:51

+0

看到运行DIFFERENCE(http)的结果会很有趣://msdn.microsoft.com/en-us/library/ms188753.aspx),所有这些字符串对,命令DESCending。 – 2012-02-20 08:02:47

回答

-1

没有做全文搜索(这是专门做这些事),你可以在一个简单的方式做到这一点,通过只用%通配符代替的空间和时间,并把%在开始和结束亲近字符串:

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

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

需要注意的是做任何类型的,你有一个领先的%符号不会从该列索引中受益LIKE搜索是很重要的。

注意这仍然不会收拾东西,如“公司”意为‘公司’作为你的榜样

+0

这不适用于OP提供的输入。 “JR”和“JimRyan”不匹配。 – 2012-02-20 04:03:50

+0

实际上它会与JR(OP在J和R之间有一个,但没有这个不会工作)和JimRyan,因为它会变成'%J%R%',它不适用于公司和公司正如我在底部所说的那样。 – Seph 2012-02-20 04:04:54

+0

这是一个非常具体的例子。如果它被颠倒过来了,他想在J.R.的参数是JimRyan时找到J.R.?我不认为你完全了解要求什么 - 这是一个同义词/模糊搜索问题,而不是一个LIKE问题。 – 2012-02-20 04:20:37

0

简单地说 - 它不能这样做,即使正火地址是复杂的,有你追随只有特定的。 。规则(str所街,例如)我是在一个项目做,在德国15年前乱套,这么说 - 因为有些地方有特殊规则(M 4 =在一个城市有效的地址,例如,因为内城是quandrants,或“大街德14月3公寓”打破了我们“第一NUMER是街道名称的结束”规则)

整个事情变得woirse - 在你xample“JR”和“吉姆瑞恩“可能会或可能不一样。还有,你可以设置一些规则,并得到了很多更容易地址(地址相同意味着在结尾的名字匹配可以EBE宽松),但总的来说,这是不是一个reasible方法。即使拼写纠正也无法解决这个问题。没有互联网访问的人工智能使用谷歌找出它是否匹配,没有办法规范化。是的,你可以fget命中率20%或30%,但给你留下左的错误和右的一吨可能比无用少从商业的角度来看。

至少需要一个标准化的标识符,您可以使用明确的选择。门牌号码,电话号码,任何可以更容易标准化的内容,然后提供名称匹配算法的指导。