14
我正在做一個MS SQL Server全文搜索查詢。我需要轉義特殊字符,以便搜索包含特殊字符的特定字詞。有沒有一個內置函數來轉義全文搜索字符串?如果不是,你會怎麼做?SQL Server全文搜索轉義字符?
我正在做一個MS SQL Server全文搜索查詢。我需要轉義特殊字符,以便搜索包含特殊字符的特定字詞。有沒有一個內置函數來轉義全文搜索字符串?如果不是,你會怎麼做?SQL Server全文搜索轉義字符?
壞消息:沒有辦法。好消息是:你不需要它(因爲反正也無濟於事)。
我在我的一個項目上遇到了類似的問題。我的理解是,同時建立全文索引,SQL Server將所有的特殊字符如文字分隔符,因此:
考慮我們與它相應的全文索引(這是跳過)如下表:
CREATE TABLE [dbo].[ActicleTable]
(
[Id] int identity(1,1) not null primary key,
[ActicleBody] varchar(max) not null
);
考慮後,我們行添加到表:
INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')
嘗試搜索:
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders')
and
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold')
第一組條件將匹配第一行(而不是第二條),而第二組僅匹配第二行。
不幸的是,我找不到MSDN(或其他)的鏈接,其中明確指出了這種行爲。但是我發現了一個official article,它告訴我們如何將全文搜索查詢的引號轉換爲[隱含地]與上述算法對齊。