SQL:喜欢vs Contains - 不同的结果

时间:2011-10-07 14:45:58

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

我正在桌面上运行两个查询。

SELECT MSDS FROM dbo.MSDSSearch3 WHERE CONTAINS(MSDS, 'STYCAST')

SELECT MSDS FROM dbo.MSDSSearch3 WHERE MSDS like '%STYCAST%'

第一个查询将返回

'STYCAST 50300 LV'

第二个将返回

'STYCAST 50300 LV'
'STYCAST 2851 BLACK'

有谁知道为什么这样会返回比包含更多的值?我的运行方式是否存在问题?提前谢谢。

2 个答案:

答案 0 :(得分:3)

这是一篇类似的帖子,重建全文目录似乎解决了这个问题:

SQL Problem: Using CONTAINS() doesn't work, but LIKE works fine

答案 1 :(得分:2)

CONTAINS是一个完全不同的函数,它是一个基于谓词的全文列查询;它不是确定列中是否包含字符串的函数。

对于您正在运行的查询,您可以使用:

SELECT MSDS FROM dbo.MSDSSearch3 WHERE CONTAINS(MSDS, '"STYCAST*"')

你有一个前缀搜索,而不是你现在拥有的simple_term搜索。

更多详情:http://msdn.microsoft.com/en-us/library/ms187787.aspx


也许在你使用它的方式中,文字'STYCAST 2851 BLACK'不属于结果,因为它比'STYCAST 50300 LV'还要多一个字符,所以它是[17 of 7 of match] vs a [ 7比16的比赛]。我不确定,但这可以解释这种奇怪的行为。