我在一个表上运行两个查询。
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'
有人知道为什么like会比contains返回更多的值吗?我运行contains的方式有问题吗?提前谢谢。
发布于 2011-10-07 23:22:10
这里有一个类似的帖子,其中重建全文目录似乎解决了这个问题:
SQL Problem: Using CONTAINS() doesn't work, but LIKE works fine
发布于 2011-10-07 22:57:24
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个匹配中的7个匹配,而不是16个匹配中的7个。我不确定,但这可以解释这种奇怪的行为。
https://stackoverflow.com/questions/7688891
复制相似问题