我有以下查询。有两列可能包含我想要的值,让我们称之为int
和FieldA
。
如果我执行此操作:
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
做同样的事情,所以如果问题是索引已经过时,那么它们都会失败,对吧?
由于
答案 0 :(得分:3)
我认为CONTAINS和全文搜索只会产生整个单词结果,因此您不会与LIKE '%string%'
匹配。如果你想要通配你的CONTAINS,你必须写成:
SELECT COUNT(1) FROM Table WHERE CONTAINS(Table.*, '"string*"')
但是,如果你想留下通配符,你就不能!您必须反转存储数据库的副本,然后执行:
SELECT COUNT(1) FROM Table WHERE CONTAINS(Table.*, '"gnirts*"')
How do you get leading wildcard full-text searches to work in SQL Server?
因此,在问题的示例中,执行CONTAINS(Table.*, 'string')
与执行LIKE '%string%'
不同,并且不会产生相同的结果。