如何在SQL全文'包含'函数中转义双引号?

时间:2010-05-21 22:28:57

标签: sql sql-server escaping

如何在MS SQL“包含”函数中转义双引号字符?

SELECT decision
FROM table 
WHERE CONTAINS(decision, '34" AND wide')

通常contains()需要双引号括起一个匹配的精确短语,但我想搜索一个实际的双引号字符。我试过用\,`,甚至是另一个双引号来逃避它,但这些都没有用。

P.S。我意识到这样一个简单的例子也可以使用LIKE语句完成,但我需要使用全文搜索功能。我提供的查询已经从我的实际查询中简化为例。

2 个答案:

答案 0 :(得分:5)

来自documentation

  

忽略标点符号。因此,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”。