SQL 正则表达式详解:语法、函数与实战案例(MySQL/Oracle通用)

SQL 正则表达式详解:语法、函数与实战案例(MySQL/Oracle通用) 在数据处理与查询场景中SQL 正则表达式是实现模糊匹配、数据清洗、格式校验的核心工具相比传统 LIKE 模糊查询正则表达式支持更复杂的字符规则匹配能高效解决手机号、邮箱、身份证号等格式验证、关键词精准提取等需求。本文将以MySQL为主兼容主流数据库正则语法系统讲解SQL正则表达式的语法规则、常用函数、实战案例并搭配表格总结与可直接运行的代码示例帮你快速掌握SQL正则的使用技巧。一、SQL正则表达式基础认知SQL中的正则表达式依赖数据库内置函数实现MySQL使用 REGEXP / RLIKE 关键字正则语法完成匹配Oracle使用 REGEXP_LIKE 函数核心语法逻辑一致仅函数调用形式略有差异。核心作用精准匹配符合特定规则的字符串如纯数字、邮箱格式替代 LIKE 实现复杂模糊查询如匹配以某字符开头、包含指定字符组数据清洗过滤无效数据、提取规范格式内容二、SQL正则表达式核心语法速查表以下是MySQL正则表达式最常用的元字符与语法覆盖90%实战场景建议直接收藏元字符/符号 含义说明 匹配示例^ 匹配字符串开头 ^a 以a开头的字符串$ 匹配字符串结尾 s$ 以s结尾的字符串. 匹配任意单个字符除换行 a.c abc、a1c、ac匹配前面的字符0次或多次 ab* a、ab、abb匹配前面的字符1次或多次 ab ab、abb、abbb? 匹配前面的字符0次或1次 ab? a、ab[字符集] 匹配字符集中任意一个字符 [abc] a、b、c [0-9] 任意数字[^字符集] 匹配不在字符集中的字符 [^0-9] 非数字字符{n} 匹配前面的字符恰好n次 [0-9]{3} 3位数字{n,m} 匹配前面的字符n~m次 [0-9]{2,4} 2-4位数字逻辑或匹配() 分组将多个字符作为整体匹配 (ab) ab、abab注意MySQL正则表达式不区分大小写若需严格区分可使用 REGEXP BINARY 关键字。三、SQL正则常用函数与基础用法MySQLREGEXP/RLIKE 关键字MySQL中直接使用 字段名 REGEXP ‘正则表达式’ 即可实现匹配 RLIKE 是 REGEXP 的同义词效果完全一致。语法格式sqlSELECT 字段 FROM 表名 WHERE 字段 REGEXP ‘正则规则’;基础匹配代码示例示例1匹配以指定字符开头/结尾的数据sql– 匹配用户名以字母a开头的用户SELECT username FROM user WHERE username REGEXP ‘^a’;– 匹配手机号以88结尾的用户SELECT phone FROM user WHERE phone REGEXP ‘88$’;示例2匹配包含指定字符组的数据sql– 匹配用户名包含a/b/c中任意一个字符的记录SELECT username FROM user WHERE username REGEXP ‘[abc]’;– 匹配用户名纯数字的记录SELECT username FROM user WHERE username REGEXP ‘1$’;示例3匹配固定长度/范围长度的字符sql– 匹配手机号为11位纯数字基础校验SELECT phone FROM user WHERE phone REGEXP ‘2{11}$’;– 匹配密码长度6-12位包含字母/数字SELECT password FROM user WHERE password REGEXP ‘3{6,12}$’;四、SQL正则实战高级案例案例1邮箱格式校验匹配标准邮箱格式字符域名.后缀sql– 校验邮箱是否符合 xxxxxx.xxx 格式SELECT email FROM userWHERE email REGEXP ‘4[a-zA-Z0-9.-]\.[a-zA-Z]{2,6}$’;规则解析5 邮箱前缀由字母、数字、下划线、点、横杠组成 固定符号[a-zA-Z0-9.-] 域名主体\.[a-zA-Z]{2,6}$ 后缀为2-6位字母如com、cn、net案例2身份证号校验18位sql– 匹配18位身份证号最后一位可为X/xSELECT id_card FROM userWHERE id_card REGEXP ‘6\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$’;案例3过滤含特殊字符的用户名sql– 匹配用户名包含#$%等特殊字符的记录SELECT username FROM user WHERE username REGEXP ‘[^a-zA-Z0-9]’;案例4逻辑或匹配多关键词sql– 匹配地址包含北京、上海、广州的记录SELECT address FROM user WHERE address REGEXP ‘北京|上海|广州’;五、不同数据库正则差异极简总结数据库 正则函数/关键字 核心区别MySQL REGEXP / RLIKE 语法简洁不区分大小写支持基础正则Oracle REGEXP_LIKE 函数式调用支持更丰富的正则扩展SQL Server LIKE 通配符/ PATINDEX 2017支持 REGEXP 兼容部分语法六、注意事项转义字符匹配 . 、 * 、 等元字符本身时需加 \ 转义如 \. 匹配点号性能优化正则匹配会全表扫描大数据量下建议先过滤索引字段再用正则大小写区分MySQL默认不区分需区分时用 REGEXP BINARY七、总结SQL正则表达式是数据查询的高效利器相比传统 LIKE 查询灵活性提升数倍尤其适合数据格式校验、复杂模糊匹配场景。本文整理的正则语法表可直接作为速查手册搭配实战代码示例能快速解决日常开发中的字符串匹配问题。建议在实际业务中优先使用正则完成格式验证类需求。0-9 ↩︎0-9 ↩︎a-zA-Z0-9 ↩︎a-zA-Z0-9._- ↩︎a-zA-Z0-9._- ↩︎1-9 ↩︎