小编Dav*_*ahl的帖子

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

我有一个表 '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。

sql sql-server contains sql-server-2014

5
推荐指数
0
解决办法
164
查看次数

标签 统计

contains ×1

sql ×1

sql-server ×1

sql-server-2014 ×1