正则表达式在MySQL5.7和MySQL8.0中的用法以及区别(应用篇)
各位客官姥爷好,欢迎回来。相信大家通过前面的内容对正则在mysql中的用法有一定的认识,那本节我们通过几个应用示例来回忆下这些用法。
这里依旧使用上节创建的测试表user,上节内容传送门:MySQL正则用法(三)
应用篇
1. 匹配name全为汉字的记录
5.7版本
select * from user where hex(name) regexp '^(e[4-9][0-9a-f]{4})+$';
8.0版本
select * from user where name regexp '^[\\u4e00-\\u9fa5]+$';
当然5.7版本的用法也适用于8.0版本
另外,考虑到可移植性的问题,这里建议使用5.7和8.0通用的语法。
2. 匹配name全为英文的记录
均适用于5.7和8.0版本
select * from user where name regexp '^[a-z]+$';
3. 匹配name中带数字记录(两人姓名相同,姓名后续要使用,为了区分所以后面加了数字)
均适用于5.7和8.0版本
select * from user where name regexp '[0-9]';
4. 匹配name中不包含汉字的记录
均适用于5.7和8.0版本
select * from user where hex(name) not regexp '(e[4-9][0-9a-f]{4})';
5.匹配name中不全为汉字和不包含数字和字母的记录
均适用于5.7和8.0版本
select * from user where hex(name) not regexp '^(e[4-9][0-9a-f]{4})+$'
and name not regexp '[0-9a-z]';
(not的优先级高于and,所以这里可以不加括号)
6.匹配name中包含连续两次重复字符的记录
5.7版本
select * from user where name regexp '(.)\\1';
无奈的是,mysql5.7不支持\1这样的通用语法,可以考虑借助其他程序语言来实现。不过幸运的是,mysql8.0版本支持。
8.0版本
select * from user where name regexp '(.)\\1';
以上就是本次的分享,正则表达式之数据库系列正在进行中,欢迎各位客官姥爷关注我,方便您第一次时间收到【干货】!
赞 (0)