数据库版本:Server version: 8.0.30 MySQL Community Server - GPL
背景:今天对自己的一个数据库表中查询指定配置的实例信息,SQL语句如下:
(资料图片仅供参考)
select *from aws_ec2_pricewhere `year` = 1 and os_type = "Windows" and vcpu = 16order by memory ;
查询出来的结果如下(仅列出了部分):
但是笔者是想继续排除非常用机型(基于的标准就是,实例类型都是以点分隔的字符串,笔者想排除任意字母点的机型,而只需要数字点的常用机型)
于是笔者就尝试了一下,可以使用如下的SQL进行与正则表达式(Regular Expression)的排除查询(其实这里核心的就是instance_type not regexp "[a-z]\\.")
select *from aws_ec2_pricewhere `year` = 1 and os_type = "Windows" and instance_type not regexp "[a-z]\\." and vcpu = 16order by memory ;
这样查询出来的,就全部是数字接着点符号的机型/实例类型了~
特别需要注意的知识点就是 点 需要使用 \\. 进行转义才能表示真正的 点 符号 , 必须写上 两个\符号
其他记录,笔者这里是使用的新版本的Mysql ,反正测试发现 正则没有区分大小写,即使写上[A-Z] 也是一样的效果
网上看到的有说(未详细测试)MySQL中正则表达式匹配(从版本3.23.4后)不区分大小写 。
如果要区分大小写,应该使用BINARY关键字,如where name REGEXP BINARY "Hello.123"
但是笔者试着在regexp关键字后面使用binary时也有有遇到如下报错,先记录于此
SQL Error [3995] [HY000]: Character set "utf8mb4_0900_ai_ci" cannot be used in conjunction with "binary" in call to regexp_like.
尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17461177.html