2015-12-01 4 views
1

Когда я бегу этот вопрос:Is Содержит Эквивалентен Как и в SQL Server

Select * from Table1 Where Column1 Like 'aaa%' --3 Result 
Select * from Table1 Where Column1 Like 'a%' --3 Result 
Select * from Table1 Where Column1 Like 'A%' --3 Result 

, но когда я бегу

Select * from Table1 Where Contains(Column1 ,'aaa') --3 Result 
Select * from Table1 Where Contains(Column1 ,'a') --0 Result 
Select * from Table1 Where Contains(Column1 ,'A') --0 Result 

CONTAINS можно найти: As Per MSDN

  1. Слово или фраза.
  2. Префикс слова или фразы.
  3. Слово рядом с другим словом.

Означает ли это, что Contains не может найти буквы?

Если да, то как?

Edit2:

declare @param as varchar(20)='a' 
select * from table1 where Contains(column1,@param) 

Это рабочая,

declare @param as varchar(20)='"a*"' 
select * from table1 where Contains(column1,@param) 

Но это не

declare @param as varchar(20)='a' 
select * from table1 where Contains(column1,@param+'*') 

И

select * from table1 where Contains(column1,'"'[email protected]+'*"') 
+3

согласно [docs] (https://msdn.microsoft.com/en-us/library/ms187787.aspx): 'Ищет точные или нечеткие (менее точные) совпадения с одиночными словами и фразами'. 'a', вероятно, будет считаться помехой/[стоп-слово] (https://msdn.microsoft.com/en-us/library/ms142551.aspx) и будет проигнорирован. try 'contains (column, 'a *')' –

+0

Вам нужно включить двойные кавычки в строку поиска. Посмотрите примеры на странице MSDN, на которые ссылается мой ответ. Те должны помочь вам. – DeadZone

ответ

4

Вы должны использовать звездочку, чтобы выполнить поиск префиксов:

WHERE CONTAINS(Column1 , ' "a*" '); 
WHERE CONTAINS(Column1 , ' "A*" '); 

В дополнение к этому, CONTAINS подлежит стопслов фильтров. Читайте на тех here

стоп-слово может быть слово со значением на определенном языке, или может быть маркер, который не имеет лингвистическое значение. Например, в английский язык, слова, такие как «a», «и», «is» и «the», являются , оставленными из полнотекстового индекса, поскольку они, как известно, бесполезны для поиска .

Чтобы пройти вход в качестве параметра, просто добавьте звездочку:

declare @SearchThis varchar(10) = 'A'; 
set @SearchThis = quotename(@SearchThis + '*', '"'); 
select @SearchThis; 

После того, как у вас есть настройки SearchThis, вы можете использовать в где:

WHERE CONTAINS(Column1, @SearchThis) 
+0

Если кому-то нужно передать строку «A» в качестве параметра, то что должно быть синтаксисом? –

+0

'WHERE CONTAINS (Column1, @SearchThis + '*')', Not Working, Неверный синтаксис Near + –

+0

проверить мое обновление. включают символы '' ' –

-1

CONTAINS является гораздо более мощным чем LIKE. От MSDN ...

Сравнение LIKE для полнотекстового поиска

В отличие от полнотекстового поиска, LIKE Transact-SQL предикат работает только на шаблоны символов.Кроме того, вы не можете использовать предикат LIKE для запрограммированных двоичных данных. Кроме того, запрос LIKE в отношении большого количества неструктурированных текстовых данных намного медленнее, чем эквивалентный полнотекстовый запрос по тем же данным. Запрос LIKE против миллионов строк текстовых данных может занять несколько минут; тогда как запрос полного текста может принимать только секунды или меньше против одних и тех же данных, в зависимости от от количества возвращаемых строк и их размера. Другой вопрос состоит в том, что LIKE выполняет только простую проверку шаблона всей таблицы . Напротив, полнотекстовый запрос - это знание языка, , применяющее конкретные преобразования по индексу и времени запроса, такие как , фильтрация стоп-слов и создание тезауруса и разворота. Эти преобразования помогают полнотекстовым запросам улучшить их отзыв и окончательный рейтинг их результатов.

Для вашей конкретной ситуации вам нужен префиксный поиск, который указывают другие ответы. Но перейдите на страницу MSDN, которую я связал. Это поможет вам.

 Смежные вопросы

  • Нет связанных вопросов^_^