最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

关于SQL语句中-使用正则的方式匹配-排除包含任意字母点两个字符的字符串

来源:博客园

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

关键词: