MySQL中替代Like模糊查询的函数方式

 更新时间:2023年08月31日 09:27:06   作者:Once0311  
这篇文章主要介绍了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()

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • MySQL笔记之索引的使用

    MySQL笔记之索引的使用

    索引是创建在表上的,对数据库表中一列或多列的值进行排序的一种结构其作用主要在于提高查询的速度,降低数据库系统的性能开销
    2013-05-05
  • mysql过滤复制思路详解

    mysql过滤复制思路详解

    这篇文章主要介绍了mysql过滤复制的实现思路,主要讲解了两种思路,一种是在主库的binlog上实现另一种是从库的sql线程上实现,具体实现过程跟随小编一起看看吧
    2021-08-08
  • 年底了,你的mysql密码安全吗

    年底了,你的mysql密码安全吗

    这篇文章主要介绍了MySQL密码安全的相关知识,帮助大家更好的使用数据库,感兴趣的朋友可以了解下
    2021-01-01
  • Mysql查询不需要Group by的字段方法实例

    Mysql查询不需要Group by的字段方法实例

    在平时的开发任务中我们经常会用到MYSQL的GROUP BY分组,用来获取数据表中以分组字段为依据的统计数据,下面这篇文章主要给大家介绍了关于Mysql查询不需要Group by字段方法的相关资料,需要的朋友可以参考下
    2024-04-04
  • mysql数据库之索引详细介绍

    mysql数据库之索引详细介绍

    大家好,本篇文章主要讲的是mysql数据库之索引详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Linux下mysql 5.6.17 安装图文教程

    Linux下mysql 5.6.17 安装图文教程

    这篇文章主要为大家详细介绍了Linux下mysql 5.6.17 安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • mysql支持跨表delete删除多表记录

    mysql支持跨表delete删除多表记录

    Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间的关系来删除某一个表中的记录
    2012-12-12
  • MySQL sum后再计算percentage的多种解决办法

    MySQL sum后再计算percentage的多种解决办法

    这篇文章主要介绍了MySQL sum后再计算percentage的多种解决办法,over() 函数,Cross Join,Select 嵌套查询以及 with 函数处理,文中通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-06-06
  • 了解MySQL查询语句执行过程(5大组件)

    了解MySQL查询语句执行过程(5大组件)

    这篇文章主要介绍了了解MySQL查询语句执行过程(5大组件),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08

最新评论