MySQL中替代Like模糊查询的函数方式
mysql替代Like模糊查询的函数
通常我们模糊查询都是用like关键字
比如:
查询name中包含 '王' 字 的
SELECT name FROM employees where name LIKE '%王%'
查询以 '王' 字开头的name
SELECT name FROM employees where name LIKE '王%'
查询以 '王' 字结尾的name
SELECT name FROM employees where name LIKE '%王'
替代like的三种方式
1、使用LOCATE(substr,str)函数
SELECT name FROM employees where LOCATE('王',name)>0 // 相当于Like '%王%'(>0可省略) SELECT name FROM employees where LOCATE('王',name)=1 // 相当于Like '王%' SELECT name FROM employees where LOCATE('王',name)=0 // 相当于 NOT Like '%王%'
2、使用POSITION(substr IN str)函数
SELECT name FROM employees where POSITION('王'IN name)>0 //相当于LIKE '%王%' SELECT name FROM employees where POSITION('王'IN name)=1 //相当于LIKE '王%' SELECT name FROM employees where POSITION('王'IN name)=0 //相当于 NOT LIKE '%王%'
3、使用INSTR(str,substr)函数 跟LOCATE(substr,str)类似 只是参数位置换了
SELECT name FROM employees where INSTR(name,'王')>0 //相当于 like '%王%' (>0可省略) SELECT name FROM employees where INSTR(name,'王')=1 //相当于 like '王%' SELECT name FROM employees where INSTR(name,'王')=0 //相当于 not like '%王%'
4、使用FIND_IN_SET(str,strlist) 注意:该字段存的必须是多个值
比如name字段中存的是(张三,李四,王五)这种数据
SELECT name FROM employees where FIND_IN_SET('王五',name)
MySQL代替like模糊查询更高效的方法
MySQL-locate()函数
LOCATE(substr,str,pos)
返回substr字符串在str里pos(起始位置)出现的位置,没有返回0
注:pos必须大于第一次出现的位置,才能显示第二次出现的位置
直接用like查询效率较低:
SELECT id,vari_sku,prod_s_id,prod_s_sku from prod_sync_s_shopee where vari_sku LIKE '%+%';
用locate()函数的替代写法:
SELECT id,vari_sku,prod_s_id,prod_s_sku from prod_sync_s_shopee where locate('+',prod_sync_s_shopee.vari_sku) <> 0;
其他函数:
POSITION()
INSTR()
FIND_IN_SET()
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
解决Linux下Tomcat向MySQL插入数据中文乱码问题
本文给大家介绍的是如何解决win平台下开发的项目移植到Linux平台后,向MySQL插入数据时中文出现乱码的问题,非常的简单实用,有需要的小伙伴可以参考下2018-04-04
最新评论