博客园  :: 首页  :: 管理

数据库版本: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