数据库版本:Server version: 8.0.30 MySQL Community Server - GPL
背景:今天对自己的一个数据库表中查询指定配置的实例信息,SQL语句如下:
select * from aws_ec2_price where `year` = 1 and os_type = 'Windows' and vcpu = 16 order by memory ;
查询出来的结果如下(仅列出了部分):
但是笔者是想继续排除非常用机型(基于的标准就是,实例类型都是以点分隔的字符串,笔者想排除任意字母点的机型,而只需要数字点的常用机型)
于是笔者就尝试了一下,可以使用如下的SQL进行与正则表达式(Regular Expression)的排除查询(其实这里核心的就是 instance_type not regexp '[a-z]\\.' )
select * from aws_ec2_price where `year` = 1 and os_type = 'Windows' and instance_type not regexp '[a-z]\\.' and vcpu = 16 order 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
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
由于博主的水平不高,文章没有高度、深度和广度,只是凑字数,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!