前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >>>数据库技术:MySQL正则表达式

>>数据库技术:MySQL正则表达式

作者头像
艾特
发布2023-10-10 14:10:37
2240
发布2023-10-10 14:10:37
MySQL正则表达式

解释说明:

tableName:表名称

#{params}:为列名称

MySQL中匹配是否,01,FM等
代码语言:javascript
复制
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中匹配汉字

匹配汉字

代码语言:javascript
复制
SELECT * FROM tableName WHERE #{params} REGEXP '^[^ -~]';

转码后匹配转码为汉字

代码语言:javascript
复制
SELECT * FROM tableName WHERE HEX(#{params}) REGEXP '^E[4-9][0-9a-f]';

匹配多少个汉字以内

代码语言:javascript
复制
SELECT * FROM tableName WHERE #{params} REGEXP '^[^ -~]{2,10}$'
MySQL中匹配固定数值

例如:数字,字符,汉字,Boolean类型

代码语言:javascript
复制
^[xxx|yyy|zzz|...]$
MySQL中匹配0% ~ 100%
代码语言:javascript
复制
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

例子:

代码语言:javascript
复制
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中匹配纯数字
代码语言:javascript
复制
SELECT * FROM tableName WHERE #{params} NOT REGEXP '^[0-9]+$';

例子:

代码语言:javascript
复制
SELECT "1243" REGEXP '^[0-9]+$';
SELECT "你好" REGEXP '^[0-9]+$';
SELECT "*&……&" REGEXP '^[0-9]+$';
SELECT "壹" REGEXP '^[0-9]+$';
MySQL中匹配1-11数字
代码语言:javascript
复制
SELECT * FROM tableName WHERE #{params} REGEXP '^[1-9]$|^10$|^11$';

例子:

代码语言:javascript
复制
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中匹配手机号码
代码语言:javascript
复制
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})$';


-- 匹配手机号码
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})';

需要匹配的手机号码,号段如下(来自百度百科的号段)

代码语言:javascript
复制
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	

例子:

代码语言:javascript
复制
-- 暂时没有匹配括号,如果需要,请自行编写正则

-- 手机号码
13800138000
+8613800138000
(86)13800138000

-- 固定电话
88881234
020-88881234
(020)88881234 
0768-8888123
(0768)8888123
+86-020-88881234
+020-020-88881234
MySQL中匹配身份证号码和生日一致
代码语言:javascript
复制
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');


-- 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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL正则表达式
    • MySQL中匹配是否,01,FM等
      • MySQL中匹配汉字
        • MySQL中匹配固定数值
          • MySQL中匹配0% ~ 100%
            • MySQL中匹配纯数字
              • MySQL中匹配1-11数字
                • MySQL中匹配手机号码
                  • MySQL中匹配身份证号码和生日一致
                  相关产品与服务
                  云数据库 MySQL
                  腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档