2010-05-21 63 views
7

如何轉義MS SQL'contains'函數中的雙引號字符?如何在SQL全文'contains'函數中轉義雙引號?

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

通常包括()預計雙引號包圍精確短語匹配,但是我想尋找一個實際的雙引號字符。我試着用\,`和其他雙引號試着轉義它,但都沒有成功。

P.S.我意識到一個簡單的例子也可以使用LIKE語句完成,但我需要使用全文搜索功能。出於示例目的,我在這裏提供的查詢已經從我的實際查詢中簡化了。

+0

OP已經看到的相關問題:http://stackoverflow.com/questions/387198/escape-double-quotes-in-sql-2005-2008 – bernie 2010-05-21 22:33:58

回答

5

documentation

標點符號被忽略。因此,CONTAINS(testing, "computer failure")與價值爲的行匹配「我的計算機在哪裏?如果找不到它將會很昂貴。」

由於FULLTEXT甚至沒有索引的標點符號,你需要使用LIKE到精細篩選結果:

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

這樣會保留全文的好處。

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'。

+0

我更新瞭解釋,以包括爲什麼一個數字會或將會不被索引。 – RLF 2014-04-10 17:44:31