MS SQL 包含与 & 符号搜索

Posted

技术标签:

【中文标题】MS SQL 包含与 & 符号搜索【英文标题】:MS SQL CONTAINS with Ampersand Search 【发布时间】:2016-12-03 05:31:41 【问题描述】:

我有一个名为“名称”的 FULLTEXT 列,每行可能包含多个单词。使用 CONTAINS,我可以搜索可变数量的单词,并且它可以工作,除非其中一个单词包含 & 符号。

示例:名称 = 'Bob Brown AB&CD' 这有效:

CONTAINS(name, '"*Bo*" AND "*Br*"')

这些不(用&符号搜索单词):

CONTAINS(name, '"*AB*"')
CONTAINS(name,'"*AB&CD*"')
CONTAINS(name,'"*&*"')

我知道为什么最后一次搜索不起作用,因为 CONTAINS 只从单词的开头搜索。

FULLTEXT 是否将 & 符号作为分词符处理?如果是这样,这可能解释了为什么包含 & 符号的搜索会失败。但它无法解释原因

CONTAINS(name, '"*AB*"')
CONTAINS(name, '"*CD*"') (assuming FULLTEXT sees "CD" as a different word)

会失败。

如果我搜索“AB&CD”或仅搜索“AB”或仅搜索“CD”,如何减轻搜索以返回该行?

附:动态 SQL 不是一个选项,因此我无法连接可变数量的 LIKE。

【问题讨论】:

【参考方案1】:

显然,我找到了答案。我设置了

STOPLIST = OFF

在我的 FULLTEXT 索引上,我现在可以通过“AB”和“AB&CD”成功搜索。

【讨论】:

以上是关于MS SQL 包含与 & 符号搜索的主要内容,如果未能解决你的问题,请参考以下文章

在 PL/SQL Developer 中转义 & 符号

MS 访问错误:SELECT 语句包含拼写错误或丢失的保留字或参数名称,或者标点符号不正确

FOFA - 查询语法参考

Oracle SQL - 字段名称中的转义与符号[重复]

如何解决 MS SQL 中不受支持的无符号整数字段类型?

使用 linq to entity (EF) 忽略搜索时的重音符号