MySQL模糊查询用法大全(正则、通配符,mybatis入门

本文详细介绍了MySQL中模糊查询的各种方法,包括通配符使用技巧、内置函数(locate, position, instr)的运用以及正则表达式(regexp)的高级匹配。强调了避免在搜索模式开始处使用通配符以提高性能,并提供了转义特殊字符的方法。同时,文章通过实例展示了如何使用LOCATE、POSITION和INSTR进行精确匹配,以及regexp的OR、正则匹配和字符类等功能。" 127256028,11213555,理解$(window).load():使用、场景与与window.onload对比,"['JavaScript', '前端开发', 'HTML']
摘要由CSDN通过智能技术生成

正如所见,MySQL的通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长,消耗更多的内存等资源。这里给出一些使用通配符要记住的技巧。

  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。

  • **在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。**因为MySQL在where后面的执行顺序是从左往右执行的,如果把通配符置于搜索模式的开始处(最左侧),搜索起来是最慢的(因为要对全库进行扫描)。

  • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

有细心地朋友会发现,如果数据中有“%”、“_”等符号,那岂不是和通配符冲突了?

SELECT * from app_info where appName LIKE ‘%%%’;

SELECT * from app_info where appName LIKE ‘%_%’;

确实如此,上面面两条SQL语句查询的都是全表数据,而不是带有"%“和”_"的指定数据。这里需要加 ESCAPE 关键字进行转义。

如下,ESCAPE 后面跟着一个字符,里面写着什么,MySQL就把那个符号当做转义符,一般我就写成"/";然后就像 C语言中转义字符一样 例如 ‘\n’,’\t’, 把这个字符写在你需要转义的那个%号前就可以了;

SELECT * from app_info where appName LIKE ‘%/_%’ ESCAPE ‘/’;

但是这种情况有没有更高端点的解决办法呢?能让检查你代码的同事或领导对你刮目相看那种~~

当然,下面我们就来看看MySQL的第二类模糊匹配方式 — 内置函数查询

二、MySQL内置函数检索(locate,position,instr)

====================================

话接上文,通过内置函数locate,position,instr进行匹配,相当于Java中的str.contains()方法,返回的是匹配内容在字符串中的位置,效率和可用性上都优于通配符匹配。

SELECT * from app_info where INSTR(appName, ‘%’) > 0;

SELECT * from app_info where LOCATE(’%’, appName) > 0;

SELECT * from app_info where POSITION( ‘%’ IN appName) > 0;

如上,三种内置函数默认都是:> 0,所以下列 > 0 可加可不加,加上可读性更好。

OK,下面一起来看看这三种内置函数的使用方法吧。

先明确一下,MySQL中的角标从左往右是从1开始的,不像java最左边第一位角标是0,因此在MySQL中角标为0时说明不存在。

2-1. LOCATE()函数


语法: LOCATE(substr,str)

返回 substr 在 str 中第一次出现的位置。如果 substr 在 str 中不存在,返回值为 0,如果substr 在 str 中存在,返回值为:substr 在 str中第一次出现的位置。

注意:LOCATE(substr,str)与 POSITION(substr IN str)是同义词,功能相同。

语法: LOCATE(substr, str, [pos])

从位置pos开始的字符串str中第一次出现子字符串substr的位置。 如果substr不在str中,则返回0。 如果substr或str为NULL,则返回NULL。

SELECT locate(‘a’, ‘banana’);       – 2

SELECT locate(‘a’, ‘banana’, 3);    – 4

SELECT locate(‘z’, ‘banana’);       – 0

SELECT locate(10, ‘banana’);        – 0

SELECT locate(NULL , ‘banana’);     – null

SELECT locate(‘a’ , N

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值