我有一个表 'Foo' 有两条这样的记录:
int | nvarchar(4000)
Col0 | Col1
------|--------------
00001 | 'Bar of SNAFU'
00002 | 'Bar SNAFU'
Run Code Online (Sandbox Code Playgroud)
我想返回具有 'of' 分隔符的记录,因此我构建了一个 CONTAINS 子句,如下所示:
SELECT *
FROM Foo
WHERE CONTAINS(*, '"Bar of*"')
0 Rows Returned
Run Code Online (Sandbox Code Playgroud)
如果我将它换成 LIKE 子句,它就可以正常工作:
SELECT *
FROM Foo
WHERE Col1 LIKE 'Bar of%'
1 Row Returned
Run Code Online (Sandbox Code Playgroud)
如果我从 CONTAINS 子句中的搜索词中删除第二个单词,它会按预期返回两行:
SELECT *
FROM Foo
WHERE CONTAINS(*, '"Bar *"')
2 Rows Returned
Run Code Online (Sandbox Code Playgroud)
只有当我在 CONTAINS 子句中包含“o*”的任何变体时才会出现问题。我可以在 CONTAINS 子句中使用多个单词并检索正确的行(通过单独的查询验证),因此空格不是问题,其他字母似乎也不会出现。我尝试重新格式化 CONTAINS 以使用 AND 关键字(“Bar*”AND“of*”)连接各个术语,但得到了相同的结果。我只需要返回一行,并且表相当大(数十万行),所以我想利用 CONTAINS 子句,而不是切换到 LIKE。