2009-09-07 4 views
2

Согласно MSDN статье 'СОДЕРЖИТ' функция TSQL есть аргумент с именем prefix_term, то Документация говорит:Postfix член в SQL Server Full Text Search

< prefix_term>

Specifies a match of words or phrases beginning with the specified 

текст. Приложить термин префикс в двойных кавычки («») и добавьте звездочку (*) перед окончанием знака котировки, так что весь текст начиная с простого срока указанного перед звездочкой совпадают.

Ну, это префикс, если я ищу «Ира», он находит «Иран, Иран, Ирак, Неистребимый и т. Д.».

Но я ищу постфиксный термин, поэтому, если я буду искать «* ran», то я ожидаю увидеть результаты в Иране, Тримаране и т. Д.

Как это сделать?

[UPDATE]

Я такой термин в колонке ArticleContent:

f5_Iran_three_islands 

Этот запрос ловит его:

Select Code,ArticleContent from Articles Where ArticleContent Like '%Ira%' 

Но я не могу поймать эту строку по этому запросу :

Select Code FROM Articles WHERE CONTAINS(ArticleContent, '"*Ira*"') 

[/ UPDATE]

ответ

0

Как вы уже нашли, документы указывают, что возможны только префиксные термины. MSDN: CONTAINS (Transact-SQL)

Если вы хотите использовать постфиксные термины, вы можете использовать стандартные подстановочные знаки (LIKE и т. Д.) Или рассмотреть возможность записи хранимой процедуры .Net, которая использует поиск регулярных выражений. Я делал это раньше, и писать sp не было так сложно, хотя загрузка его на сервер была боль (.Net 2, SQL Server 2005).

1

Иран :) в ту же проблему. Вы можете создать обратную копию текста в другом столбце, а затем искать обратное значение.

declare @value varchar(50), @value_contains varchar(53), @value_contains_reverse varchar(53) 
set @value = '20602019'; 
set @value_contains = '"'[email protected]+'*"'; 
set @value_contains_reverse = '"'+reverse(@value)+'*"'; 
select charindex(@value, matchstring) from Table 
where contains(matchstring, @value_contains) or contains(matchstring_reverse,@value_contains_reverse) 
Смежные вопросы