Mysql正则表达式查询(含完整例子)

Mysql正则表达式查询

1.语法
属性名 REGEXP '匹配方式'

   其中,“属性名”表示需要查询的字段名称;“匹配方式”表示以哪种方式来匹配查询。“匹配方式”中有很多的模式匹配字符,它们分别表示不同的意思。下表列出了 REGEXP 操作符中常用的匹配方式。

选项说明例子匹配值示例
^匹配文本的开始字符‘^b’ 匹配以字母 b 开头的字符串book、big、banana、bike
$匹配文本的结束字符‘st$’ 匹配以 st 结尾的字符串test、resist、persist
.匹配任何单个字符‘b.t’ 匹配任何 b 和 t 之间有一个字符bit、bat、but、bite
*匹配前面的字符 0 次或多次‘f*n’ 匹配字符 n 前面有任意个字符 ffn、fan、faan、abcn
+匹配前面的字符 1 次或多次‘ba+’ 匹配以 b 开头,后面至少紧跟一个 aba、bay、bare、battle
?匹配前面的字符 0 次或1次‘sa?’ 匹配0个或1个a字符sa、s
字符串匹配包含指定字符的文本‘fa’ 匹配包含‘fa’的文本fan、afa、faad
[字符集合]匹配字符集合中的任何一个字符‘[xz]’ 匹配 x 或者 zdizzy、zebra、x-ray、extra
[^]匹配不在括号中的任何字符‘[^abc]’ 匹配任何不包含 a、b 或 c 的字符串desk、fox、f8ke
字符串{n,}匹配前面的字符串至少 n 次‘b{2}’ 匹配 2 个或更多的 bbbb、bbbb、bbbbbbb
字符串
{n,m}匹配前面的字符串至少 n 次, 至多 m 次‘b{2,4}’ 匹配最少 2 个,最多 4 个 bbbb、bbbb
2.例子
2.1 查询 name 字段以j开头的记录
select * from person where name REGEXP '^j'

在这里插入图片描述

2.2 查询 name 字段以“y”结尾的记录
select * from person where name REGEXP 'y$'

在这里插入图片描述

2.3 查询 name 字段值包含“a”和“y”,且两个字母之间只有一个字母的记录
select * from person where name REGEXP 'a.y'

在这里插入图片描述

2.4 查询 name 字段值包含字母“T”,且“T”后面出现字母“h”的记录
select * from person where name REGEXP 'Th*'

在这里插入图片描述

2.5 查询 name 字段值包含字母“T”,且“T”后面至少出现“h”一次的记录
select * from person where name REGEXP 'Th+'

在这里插入图片描述

2.6 查询 name 字段值包含字母“S”,且“S”后面出现“a”一次或零次的记录
select * from person where name REGEXP  'sa?'

在这里插入图片描述

2.7 查询 name 字段值包含字符串“an”的记录
select * from person where name REGEXP 'an'

在这里插入图片描述

2.8 查询 name 字段值包含字符串“an”或“en”的记录

   指定多个字符串时,需要用|隔开。只要匹配这些字符串中的任意一个即可。

select * from person where name REGEXP 'an|en'

在这里插入图片描述

2.9 查询 name 字段值包含字母“i”或“o”的记录
select * from person where name REGEXP '[io]'

在这里插入图片描述
   方括号[ ]还可以指定集合的区间。例如,“[a-z]”表示从 a~z 的所有字母;“[0-9]”表示从 0~9 的所有数字;“[a-z0-9]”表示包含所有的小写字母和数字;“[a-zA-Z]”表示匹配所有字符。MySQL中的正则表达式匹配不区分大小写。为区分大小写,可使用BINARY关键字。

select * from person where name REGEXP BINARY   '^[a-z]'

在这里插入图片描述

2.10 查询 name 字段值包含字母 a~t 以外的字符的记录
select * from person where name REGEXP   '[^a-t]'

在这里插入图片描述

2.11 查询 name 字段值出现字母‘e’ 至少 2 次的记录
select * from person where name REGEXP  'e{2,}'

在这里插入图片描述

2.12 查询 name 字段值出现字符串“i” 最少 1 次,最多 3 次的记录
select * from person where name REGEXP  'i{1,3}'

在这里插入图片描述

   所需表和数据:


DROP TABLE IF EXISTS `person`;
CREATE TABLE `person`  (
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(40) NULL DEFAULT NULL,
  `heigh` int(40) NULL DEFAULT NULL,
  `sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;


INSERT INTO `person` VALUES ('Thomas ', 25, 168, '男');
INSERT INTO `person` VALUES ('Tom ', 20, 172, '男');
INSERT INTO `person` VALUES ('Dany', 29, 175, '男');
INSERT INTO `person` VALUES ('Jane', 27, 171, '男');
INSERT INTO `person` VALUES ('Susan', 24, 173, '女');
INSERT INTO `person` VALUES ('Green', 25, 168, '女');
INSERT INTO `person` VALUES ('Henry', 21, 160, '女');
INSERT INTO `person` VALUES ('Lily', 18, 190, '男');
INSERT INTO `person` VALUES ('LiMing', 19, 187, '男');
  • 15
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,正则表达式查询可以使用REGEXP关键字。正则表达式与Java语言、PHP语言等编程语言中的正则表达式基本一致。要查询以特定字符或字符串开头的记录,可以使用^符号,例如: SELECT * FROM 表名 WHERE 列名 REGEXP '^特定字符或字符串'; 举个例子,在tb_students_info表中,要查询name字段以"Ji"开头的记录,可以使用以下SQL语句: SELECT * FROM tb_students_info WHERE name REGEXP '^Ji'; 执行该查询语句后,会返回以"Ji"开头的记录,比如name为"Jim"的记录。 要查询以特定字符或字符串结尾的记录,可以使用$符号,例如: SELECT * FROM 表名 WHERE 列名 REGEXP '特定字符或字符串$'; 举个例子,在tb_students_info表中,要查询name字段以"ry"结尾的记录,可以使用以下SQL语句: SELECT * FROM tb_students_info WHERE name REGEXP 'ry$'; 执行该查询语句后,会返回以"ry"结尾的记录,比如name为"Henry"的记录。 另外,如果想替代字符串中的任意一个字符,可以使用"."符号。但需要注意的是,正则表达式查询在性能上可能会比较消耗资源,所以在实际使用时需要谨慎考虑。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [17、REGEXP:正则表达式,查询和替换符合某个模式(规则)的文本内容](https://blog.csdn.net/weixin_44234912/article/details/108981244)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值