转义括号[在CONTAINS()子句中?

Jef*_*ood 10 t-sql sql-server

如何在全文SQL Server contains()查询中转义括号?我已经尝试了以下所有,但没有一个工作:

CONTAINS(crev.RawText, 'arg[0]')
CONTAINS(crev.RawText, 'arg[[0]]')
CONTAINS(crev.RawText, 'arg\[0\]')
Run Code Online (Sandbox Code Playgroud)

使用双引号确实有效,但它会强制整个搜索成为一个短语,这是一个多字查询的showstopper.

CONTAINS(crev.RawText, '"arg[0]"')
Run Code Online (Sandbox Code Playgroud)

我真正想做的就是逃避支架,但我似乎无法做到这一点......

小智 8

您无需逃避[因​​为它在全文搜索中没有特殊含义.如果您确实需要搜索完全匹配,则可以使用""标记.

此外,您可以在单引号内使用多个"":

CONTAINS('"word1" or "word2" or "word3"')
Run Code Online (Sandbox Code Playgroud)

这也有效:

CONTAINS('"word1" and "word2" and "word3"')
Run Code Online (Sandbox Code Playgroud)

放在双引号内的任何内容都被视为完全文本.因此,如果我在AdventureWorks中搜索Production.ProductDescription表的Description字段,我可以使用

CONTAINS('shifting and "on or off-road"') 
Run Code Online (Sandbox Code Playgroud)

并且它会找到单词移位的匹配,也有短语"on or off-road".

唯一的特殊符号是〜,它可以用来代替NEAR命令.

CONTAINS('shifting ~ smooth')
Run Code Online (Sandbox Code Playgroud)

是相同的

CONTAINS('shifting NEAR smooth')
Run Code Online (Sandbox Code Playgroud)

并且会找到匹配,其中单词移动和平滑彼此接近.