正则表达式在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)

相关推荐