为什么CONTAINS和LIKE会返回不同的结果?

时间:2018-06-18 13:51:21

标签: sql sql-server

我有以下查询。有两列可能包含我想要的值,让我们称之为intFieldA

如果我执行此操作:

FieldB

我回来了#34; 0"。

但是,如果我执行此操作:

SELECT COUNT(1) 
FROM Table 
WHERE CONTAINS(Table.*, 'string')

我找回了9000之类的东西。然后我检查了SELECT COUNT(1) FROM TABLE WHERE FieldA LIKE '%string%' OR FieldB LIKE '%string%' 中有string字的行。

为什么会这样?我记得FieldA使用全文索引,但我还记得CONTAINS做同样的事情,所以如果问题是索引已经过时,那么它们都会失败,对吧?

由于

1 个答案:

答案 0 :(得分:3)

我认为CONTAINS和全文搜索只会产生整个单词结果,因此您不会与LIKE '%string%'匹配。如果你想要通配你的CONTAINS,你必须写成:

SELECT COUNT(1) FROM Table WHERE CONTAINS(Table.*, '"string*"')

但是,如果你想留下通配符,你就不能!您必须反转存储数据库的副本,然后执行:

SELECT COUNT(1) FROM Table WHERE CONTAINS(Table.*, '"gnirts*"')

https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ms552152(v=office.14)

How do you get leading wildcard full-text searches to work in SQL Server?

因此,在问题的示例中,执行CONTAINS(Table.*, 'string')与执行LIKE '%string%'不同,并且不会产生相同的结果。