CONTAINS不会返回任何结果

时间:2015-04-06 22:48:38

标签: mysql sql

我知道可以使用LIKE代替CONTAINS,但与CONTAINS相比,LIKE相对更快。在这里,以下查询不会返回任何结果。为什么呢?

查询:

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

数据库:

enter image description here

3 个答案:

答案 0 :(得分:0)

您是否尝试过使用 ,如果它适用于您的情况可能会更快

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

但是在你的情况下你可以把 %% 放在contains中实际上更快然后包含所以只需使用这个

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

答案 1 :(得分:0)

试试这个

如果国家/地区列上有全文搜索索引。

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

否则只做

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

有一个unicode字符é,你需要在字符串前加上N

答案 2 :(得分: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

完整示例(包括创建索引时的更改跟踪选项,而不是后来的alter语句中的更改跟踪选项):

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');