MySQL 正则表达式,部分不同于Java或者JS正则
MySQL正则表达式
解释说明:
tableName:表名称
#{params}:为列名称
- MySQL中匹配是否,01,FM等
1 2 3 4 5 6 7 | SELECT * FROM tableName WHERE #{ params } REGEXP '^[0|1]$' ; SELECT * FROM tableName WHERE #{ params } REGEXP '^[是|否]$' ; SELECT * FROM tableName WHERE #{ params } REGEXP '^[F|M]$' ; SELECT * FROM tableName WHERE #{ params } REGEXP '^[男|女|其他]$' ; SELECT * FROM tableName WHERE #{ params } REGEXP '^[0|1]$|^[是|否]$|^[F|M]$' ; |
- MySQL中匹配汉字
1 2 | SELECT * FROM tableName WHERE #{ params } REGEXP '^[^ -~]' ; SELECT * FROM tableName WHERE HEX(#{ params }) REGEXP '^E[4-9][0-9a-f]' ; |
- MySQL中匹配固定数值
数字,字符,汉字,Boolean类型
1 | ^[xxx|yyy|zzz|...]$ |
- MySQL中匹配0% ~ 100%
1 | SELECT * FROM tableName WHERE #{ params } NOT REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' |
例如:0,0.0,0.00,0.8,0.87,1.0,1.1,1.00,1.10,1.9,1.97,20,20.98,20.9,100
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT "0" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "00" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "0.0" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "0.00" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "00.00" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "0.8" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "0.87" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "1.9" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "1.0" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "1.00" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "1.97" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "20.8" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "20.87" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; SELECT "100" REGEXP '(^0{1,2}\.[0-9]{1,2}$)|^[0-9]{1}\.[0-9]{1,2}$|^[1-9]{1}[0-9]{1}\.[0-9]{1,2}$|^[0-9]{1,2}$|^100$' ; |
- MySQL中匹配纯数字
1 | SELECT * FROM tableName WHERE #{ params } NOT REGEXP '^[0-9]+$' ; |
例子:
1 2 3 4 | SELECT "1243" REGEXP '^[0-9]+$' ; SELECT "你好" REGEXP '^[0-9]+$' ; SELECT "*&……&" REGEXP '^[0-9]+$' ; SELECT "壹" REGEXP '^[0-9]+$' ; |
- MySQL中匹配1-11数字
1 | SELECT * FROM tableName WHERE #{ params } REGEXP '^[1-9]$|^10$|^11$' ; |
例子:
1 2 3 4 5 6 | SELECT "0" REGEXP '^[1-9]$|^10$|^11$' ; SELECT "1" REGEXP '^[1-9]$|^10$|^11$' ; SELECT "10" REGEXP '^[1-9]$|^10$|^11$' ; SELECT "11" REGEXP '^[1-9]$|^10$|^11$' ; SELECT "12" REGEXP '^[1-9]$|^10$|^11$' ; SELECT "13" REGEXP '^[1-9]$|^10$|^11$' ; |
- MySQL中匹配手机号码
1 2 3 | SELECT * FROM tableName WHERE #{ params } REGEXP '^([1](3[0-9]|4[579]|5[012356789]|6[67]|7[235678]|8[0-9]|9[012356789])[0-9]{8})|((\d{2}-)?(\d{3,4}-)?\d{8})$' ; SELECT * FROM tableName WHERE #{ params } REGEXP '^([1](3[0-9]|4[579]|[5789][0-9]|6[67])[0-9]{8})|((\d{2}-)?(\d{3,4}-)?\d{8})$' ; |
1 2 3 4 5 6 7 8 | -- 匹配手机号码 SELECT * FROM tableName WHERE #{ params } REGEXP '^(((\\+)?([0-9]{2,3})-?)?[1][3-9]{2}[0-9]{8})$' ; -- 匹配固定电话 SELECT * FROM tableName WHERE #{ params } REGEXP '^(\\+)?(([0-9]{2}-)?([0-9]{3,4}-)?[0-9]{8})$' ; -- 综合查询 SELECT * FROM tableName WHERE #{ params } REGEXP '^(((\\+)?([0-9]{2,3})-?)?[1][3-9]{2}[0-9]{8})$|^(\\+)?(([0-9]{2}-)?([0-9]{3,4}-)?[0-9]{8})' ; |
需要匹配的手机号码,号段如下(来自百度百科的号段)
1 2 3 4 5 6 7 | 130、131、132、133、134(0-8)、135、136、137、138、139 145、147、149、 150、151、152、153 、155、156、157、158、159、 166、 172、173、175、176、177、178、 180 、181 、182、183、184、185、186、187、188、189、 190、191、192、193、195、196、197、198、199 |
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | -- 暂时没有匹配括号,如果需要,请自行编写正则 -- 手机号码 13800138000 +8613800138000 (86)13800138000 -- 固定电话 88881234 020-88881234 (020)88881234 0768-8888123 (0768)8888123 +86-020-88881234 +020-020-88881234 |
- MySQL中匹配身份证号码和生日一致
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '130928198905281793' , '1989-05-28' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '130532197901235712' , '1989-05-28' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '513221197102183838' , '1989-05-28' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '610523198305134774' , '' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '230111197104266110' , '1989-05-28' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '510422198603243893' , '1986-03-24' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '130426198908106712' , '1989-05-28' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '500101198401133397' , '1989-05-28' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '440605197607137950' , '' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '410181197101202157' , '1989-05-28' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '522425198109113949' , '1989-05-28' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '331122197508146901' , '1989-05-28' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '500103198503111941' , '1985-03-11' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '231084198808141445' , '1988-05-28' ); INSERT INTO data_card_birth(`cardid`, `birthday`) VALUES( '610122198502268749' , '1985-05-28' ); |
执行语句:
1 2 | -- 15位的未处理,因为15位的只有年的最后两位,这个其实可以判断 SELECT * FROM data_card_birth t WHERE birthday IS NOT NULL AND SUBSTR(cardid, 7, 8) = REPLACE(birthday, "-" , "" ) ; |
注意
- 请全部使用英文,我在编写MySQL正则或者Java正则时,有些时候输入了中文的符号,没有按照预期匹配到我想要的数据。
- 在MySQL中使用了 \d ,不能执行或者执行错误时,请转换为 [0-9] 后尝试检查是否正确,我在执行时遇到此种情况,MySQL 5.7.27


您的资助是我最大的动力!
金额随意,欢迎来赏!
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
欢迎大家关注我的个人博客 Lycos | 小站 !由于最近没时间处理,原域名http://www.liuyuchuan.com暂时停止使用
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· Ai满嘴顺口溜,想考研?浪费我几个小时