LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

快速学会SQL中正则表达式REGEXP的使用技巧

admin
2024年2月7日 21:56 本文热度 642

在 SQL 查询语句中,REGEXP 是一个强大的正则表达式匹配运算符,用于在字符串中执行复杂的模式匹配。通过 REGEXP,用户可以定义自己的匹配模式,对数据进行精确或模糊的搜索,从而有效地处理各种复杂模式的字符串搜索需求。这为数据提取和处理提供了极大的便利。


正则表达式使用REGEXP命令进行匹配时,匹配成功,则返回结果为真(1),否则返回结果为假(0)。


由于LIKE跟REGEXP都是用于字符串模式匹配,这里为了节省空间,本篇文章将沿用之前LIKE篇章中所采用的测试数据作为演示。



 01. 

REGEXP的语法


在SQL查询语句中,REGEXP的基本语法如下:

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 列名1 REGEXP '正则表达式匹配模式';

其中:

SELECT 列名1, 列名2, ...选择要检索的列。


FROM 表名指定要从中检索数据的表。


WHERE 列名1 REGEXP '正则表达式匹配模式'这部分是查询的条件,使用REGEXP运算符来过滤结果。只有满足正则表达式匹配模式的行才会被返回。


正则表达式由特殊字符和元字符组成,用于定义搜索模式。以下是一些常见的正则表达式元字符。

  • ^:匹配字符串的开头

  • $匹配字符的结尾

  • .匹配任意单个字符

  • |:跟or类似,表示或

  • *匹配前面的字符或子模式零次或多次

  • +匹配前面的字符或子模式1次或多次

  • ?匹配前面的字符或子模式零次或1次

  • []:匹配括号内的任意一个字符

  • [^]:匹配不在括号内的任意一个字符

  • [a-z]:匹配范围内的任意一个字符




 02. 

REGEXP的基本用法


在日常工作中,我们经常使用REGEXP进行复杂的数据匹配和筛选,以下是关于REGEXP操作符的常见用法。


1. 搜索以特定字符或字符串开头的值

倘若,我们想要查询名字中以"古"字开头的员工,可以使用以下SQL语句:

SELECT * FROM tb_employees WHERE name REGEXP '^古';

查询结果如下:


2. 搜索以特定字符或字符串结尾的值

倘若,我们想要查询名字中以"音"字结尾的员工,可以使用以下SQL语句:

SELECT * FROM tb_employees WHERE name REGEXP '音$';

查询结果如下:


3. 搜索包含特定字符或字符串的值

倘若,我们想要查询名字中包含"凤"字,且年龄大于16的员工,可以使用以下SQL语句:

SELECT * FROM tb_employees WHERE name REGEXP '凤' AND age > 16;

可以看到,要查询名字中包含特定字(例如"凤")的员工,当我们使用 REGEXP 时,不需加任何匹配规则,只需用单引号或双引号来包围字符即可,相当于LIKE '%%'注意,REGEXP 中没有LIKE的%和_通配符


查询结果如下:


那如果想要查询名字中含有下划线的员工,可以使用以下SQL语句。

SELECT * FROM tb_employees WHERE name REGEXP '_'

可以看到,使用REGEXP进行模式匹配,不需要像LIKE那样要使用转义符


查询结果如下:


倘若,我们想要查询名字中含有c,且c前面包含r或b的员工。可以使用以下SQL语句:

SELECT * FROM tb_employees WHERE name REGEXP '[br]c';

这个查询会搜索name中包含 bc、rc 的记录。若调整c的位置,c[br],则会搜索name中包含cb、cr的记录。


这条语句的查询结果如下:


想要查找名字中含有小写字母的员工,可以使用以下SQL语句

SELECT * FROM tb_employees WHERE name REGEXP '^[a-z]';

默认情况下,REGEXP是不区分大小写的查询结果跟上图一致,返回abc、abrc的记录。


如果我们想找到所有名字中包含"古"或"音"的员工,可以使用以下SQL语句

-- 方法1
SELECT * FROM tb_employees WHERE name REGEXP '[古音]';

-- 方法2
SELECT * FROM tb_employees WHERE name REGEXP '古|音';

查询结果如下:


4. 搜索包含特定长度的字符或字符串的值

倘若,我们想要查询名字长度为2个字符的员工,可以使用以下SQL语句:

SELECT * FROM tb_employees WHERE name REGEXP '^.{2}$';

在这个语句中^ 表示字符串的开头,$ 表示字符串的结尾,.{2} 表示匹配任意两个字符,.表示任意字符,{2} 表示恰好匹配两次


查询结果同上图结果一致,只返回古晋跟阿音2人。


通过上述示例,我们发现REGEXP与LIKE功能相似,但更为强大。它能够实现复杂且独特的规则匹配。


🌟 注意:

1、在正则表达式中,使用括号()可以创建捕获组,将括号内的内容作为一个整体进行匹配。例如,正则表达式(ABC)会匹配整个字符串"ABC"。


2、REGEXP默认采用部分匹配原则,即只要有一个匹配项,就会返回真。


3、尽管REGEXP的功能强大且灵活,在处理复杂模式匹配时也是不可或缺,但在处理大量数据时,其性能可能会受到影响。因此,在编写复杂的正则表达式时,我们应注重优化以提高查询效率。在必要时,还需考虑采用其他方法,如数据预处理或索引,以进一步改善查询性能。当然,对于简单的查询,使用LIKE操作符可能更为合适且高效。


关于SQL 中的正则表达式REGEXP,本次分享就到这了。希望这个系列能帮助大家更深入地理解和运用数据库。


该文章在 2024/2/7 21:56:33 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved