赞
踩
目前sql有四种匹配模糊查询模式 % _ [] [^]
表示任意0-n个字符,可匹配任意类型和长度
// sql
select * from table where name like '%三%';
// mybatis
.... where name like concat('%',#{name},'%');
表示任意单个字符----用来限长的
// sql
select * from table where name like '_三_';
// mybatis
.... where name like concat('_',#{name},'_');
表示括号内所有列之内的一个
// sql
select * from table where name like '[张李王]三';
// mybatis
.... where name like '[张李王]'#{name};
##[^] 单个
表示不在括号内的字符
// sql
select * from table where name like '[^张李王]三';
// mybatis
.... where name like '[^张李王]'#{name};
对于用like查询会有性能问题,且做模糊会让索引失效,从而全表扫描
优化方法有四种
INSTR(str,substr)
instr(title,‘手册’)>0 相当于 title like ‘%手册%’
instr(title,‘手册’)=1 相当于 title like ‘手册%’
instr(title,‘手册’)=0 相当于 title not like ‘%手册%’
select * from table where INSTR(name, #{keyWords} )
select * from table where LOCATE(#{keyWords} , name )
可以用or来多次查询不同的数据条件;
可以查询这样([4,3])的数据
POSITION(substr IN str)
select * from table where position(#{keyWords} in name )
FIND_IN_SET(str,strlist)
适用于查询带逗号的字符串
select * from table where FIND_IN_SET(#{keyWords}, name )
INSTR(CONCAT(mui.nickname,yui.nickname),#{query}) > 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。