我正在桌面上运行两个查询。
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'
有谁知道为什么这样会返回比包含更多的值?我的运行方式是否存在问题?提前谢谢。
答案 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的比赛]。我不确定,但这可以解释这种奇怪的行为。