使用concat列找不到像'%search%'这样的Mysql

时间:2014-11-23 02:57:34

标签: mysql sql-like concat

我创建了这个表:

create table if not exists `example`(
`firstNames` varchar(45) not null,
`secondNames` varchar(45) not null)
ENGINE = InnoDB;

现在我插入一行:

insert into example values('Jose Alonzo', 'Pena Palma');

检查是否正确

select * from example;

| firstNames | secondNames |
----------------------------
| Jose Alonzo|  Pena Palma |

没关系! 简单 现在我创建一个用于搜索此行的语句

set @search = 'jose alonzo pena';
select * from example
where concat(firstNames, ' ', secondNames) like concat('%',@search,'%');

此回归

| firstNames | secondNames |
----------------------------
| Jose Alonzo|  Pena Palma |

现在我更改@search for'jose pena'的值

set @search = 'jose pena';
select * from example
where concat(firstNames, ' ', secondNames) like concat('%',@search,'%');

不要什么都不回来!

| firstNames | secondNames |

发生了什么事? 我不能用于varchar中间的字符吗?

1 个答案:

答案 0 :(得分:1)

不,你不能对字符串中间的字符使用like。或者,换句话说,空格字符与空格字符匹配,而不是任意字符串。以下内容将匹配:

where concat(firstNames, ' ', secondNames) like concat('%', replace(@search, ' ', '%'), '%')

订单很重要,因此符合concat(firstNames, ' ', secondNames)但不符合concat(secondNames, ' ', firstNames)

如果您对这些类型的搜索感兴趣,请调查full text indexes。除了更强大,它们也更快。