为什么我不能使用带有“ o *”任何变体的SQL Contains()?

时间:2019-12-04 14:38:24

标签: sql sql-server sql-server-2014 contains

我有一个带有两个记录的表'Foo',如下所示:

int   | nvarchar(4000)
Col0  | Col1
------|--------------
00001 | 'Bar of SNAFU'
00002 | 'Bar SNAFU'

我想返回带有'of'分隔符的记录,所以我构造了一个看起来像这样的CONTAINS子句:

SELECT *
FROM Foo
WHERE CONTAINS(*, '"Bar of*"')

0 Rows Returned

如果我将其交换为LIKE子句,它就可以正常工作:

SELECT *
FROM Foo
WHERE Col1 LIKE 'Bar of%'

1 Row Returned

如果我从CONTAINS子句中的搜索词中删除了第二个单词,它会按预期返回两行:

SELECT *
FROM Foo
WHERE CONTAINS(*, '"Bar *"')

2 Rows Returned

仅当我在CONTAINS子句中包含“ o *”的任何变体时,才会出现此问题。我可以在CONTAINS子句中使用多个单词并检索正确的行(通过单独的查询验证),因此空格不是问题,其他字母似乎也不会出现空格。我尝试使用AND关键字(“ Bar *” AND“ of *”)将CONTAINS重新格式化以合并各个术语,但是得到了相同的结果。我只需要返回一行,并且表相当大(数十万行),所以我想利用CONTAINS子句,而不是切换到LIKE。

0 个答案:

没有答案