我创建了这个表:
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中间的字符吗?
答案 0 :(得分:1)
不,你不能对字符串中间的字符使用like。或者,换句话说,空格字符与空格字符匹配,而不是任意字符串。以下内容将匹配:
where concat(firstNames, ' ', secondNames) like concat('%', replace(@search, ' ', '%'), '%')
订单很重要,因此符合concat(firstNames, ' ', secondNames)
但不符合concat(secondNames, ' ', firstNames)
。
如果您对这些类型的搜索感兴趣,请调查full text indexes。除了更强大,它们也更快。