如何在MS SQL“包含”函数中转义双引号字符?
SELECT decision
FROM table
WHERE CONTAINS(decision, '34" AND wide')
通常contains()需要双引号括起一个匹配的精确短语,但我想搜索一个实际的双引号字符。我试过用\,`,甚至是另一个双引号来逃避它,但这些都没有用。
P.S。我意识到这样一个简单的例子也可以使用LIKE语句完成,但我需要使用全文搜索功能。我提供的查询已经从我的实际查询中简化为例。
答案 0 :(得分:5)
忽略标点符号。因此,
CONTAINS(testing, "computer failure")
匹配具有值的行“我的计算机在哪里?未能找到它会很昂贵。”
由于FULLTEXT
甚至没有为标点符号编制索引,因此您需要使用LIKE
对结果进行精细过滤:
SELECT decision
FROM table
WHERE CONTAINS(decision, '34 AND wide')
AND decision LIKE '%34"%'
这将保留全文的好处。
答案 1 :(得分:2)
如果您的字符串是一位数字,则上述答案在SQL Server 2008中不起作用。
这有效:
SELECT partdescription
FROM table
WHERE CONTAINS(partdescription, '10')
AND decision LIKE '%10"%'
这不起作用:
SELECT partdescription
FROM table
WHERE CONTAINS(partdescription, '6')
AND decision LIKE '%6"%''
编辑:解释为什么不能索引单个数字。
如果正在使用SYSTEM停用词(或干扰词)列表,则它包含每个数字作为要忽略的词。您可以更改“停止词”列表的内容,也可以完全关闭“停止词”。
ALTER FULLTEXT INDEX ON dbo.my_ft_table SET STOPLIST = OFF;
完成其中一项更改后,必须重新编制受影响的文本,然后才能搜索单个数字。在重新索引之后,它确实可以搜索“6”。