为什么我不能使用任何变体的 "o*" 来使用 SQL 的 Contains() 函数?

10 浏览
0 Comments

为什么我不能使用任何变体的 "o*" 来使用 SQL 的 Contains() 函数?

我有一个名为'Foo'的表,其中有两条记录如下:

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

我想要返回含有'of'分隔符的记录,所以我构建了一个类似下面的CONTAINS子句:

SELECT *
FROM Foo
WHERE CONTAINS(*, '"Bar of*"')
0行返回

如果我将其替换为LIKE子句,它就能正常工作:

SELECT *
FROM Foo
WHERE Col1 LIKE 'Bar of%'
返回1行

如果我在CONTAINS子句的搜索条件中去掉第二个单词,它会返回两行,符合预期:

SELECT *
FROM Foo
WHERE CONTAINS(*, '"Bar *"')
返回2行

问题只发生在我在CONTAINS子句中包含任何形式的"o*"时。我可以在CONTAINS子句中使用多个单词并检索到正确的行(通过另一个查询进行验证),所以空格不是问题,也不会发生在其他字母上。我尝试重新格式化CONTAINS以使用AND关键字连接各个项("Bar*" AND "of*"),但结果相同。我需要返回只有一行的结果,并且该表相当大(数十万行),所以我希望利用CONTAINS子句,而不是切换到LIKE。

0