2015-04-06 2 views
0

Я знаю, что LIKE может использоваться вместо CONTAINS, но CONTAINS относительно быстрее по сравнению с LIKE. Здесь следующий запрос не возвращает мне никакого результата. Зачем?CONTAINS не возвращает никаких результатов

Запрос:

SELECT CustomerName FROM members WHERE CONTAINS(Country, 'Mexico'); 

БАЗА ДАННЫХ:

enter image description here

+0

Какова ваша сортировка? Если это акцент чувствителен, проверьте, что поле вашей страны действительно является Мексикой, а не Мехико, как в вашем городе; также проверьте, что он не чувствителен к регистру. – JohnLBevan

+0

@JohnLBevan его, как написано .... Mexico – AbhimanyuAryan

+0

Просто заметили тег mysql; это было там раньше? Я отвечал за MS SQL Server. Для MySQL я считаю, что синтаксис будет 'select customername от членов, где match (country) против ('Mexico')' – JohnLBevan

ответ

0

MySQL Решение

select customername 
from members 
where match(country) against ('Mexico') 

Решение MS SQL Server

Полные текстовые индексы не обязательно всегда заполняются после создания. Используйте следующий код для обеспечения обновления индекса:

ALTER FULLTEXT INDEX ON members SET CHANGE_TRACKING AUTO; 

Подробнее: https://msdn.microsoft.com/en-us/library/ms142575.aspx

Полный пример (в том числе отслеживания изменений опцию создания индекса, а не в более позднем альтер заявление):

use StackOverflow 
go 

create table myTable 
(
    id bigint not null identity(1,1) 
     constraint myTable_pk primary key clustered 
    , name nvarchar(100) 
); 

create fulltext catalog StackOverflow_Catalog; 

create fulltext index 
    on myTable(name) 
    key index myTable_pk 
    on StackOverflow_Catalog 
    with change_tracking auto; 

insert myTable 
    select 'Mexico' 
    union select 'London'; 

select * 
    from myTable 
    where contains(name,'Mexico'); 
0

Вы пробовали использовать в это может быть даже быстрее, если он работает в вашем случае

SELECT CustomerName 
FROM members 
WHERE Country IN ('Mexico') 

Но в вашем случае вы можете поместить %% в содержит на самом деле быстрее, содержат так просто использовать этот

SELECT CustomerName 
    FROM members 
    WHERE CONTAINS(Country, '"*Mexico"'); 
+0

По-прежнему нет результатов со второй командой. Первый работает отлично. Я использую phpmyadmin. Кажется, это проблема? – AbhimanyuAryan

0

попробовать этот

Если полнотекстовый поиск Индекс по столбцу Country.

SELECT CustomerName FROM members 
WHERE CONTAINS(Country, 'Mexico'); 

В противном случае просто сделать

SELECT CustomerName FROM members 
WHERE Country LIKE N'%Mexico%'; 

есть юникода характер é, вам необходимо предварить строку с N

+0

Первый по-прежнему показывает пустой результат запроса.Однако вторая версия с LIKE работает отлично. – AbhimanyuAryan

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