MySql011——检索数据:过滤数据(使用正则表达式)

news2024/11/27 8:44:59

前提:使用《MySql006——检索数据:基础select语句》中创建的products表
在这里插入图片描述

一、正则表达式介绍

关于正则表达式的介绍大家可以看我的这一篇博客《Java038——正则表达式》,这里就不再累赘。

二、使用MySQL正则表达式

2.1、基本字符匹配

  1. 检索列prod_name包含文本1000的所有行
SELECT 
    prod_name
FROM
    study.products
WHERE
    prod_name REGEXP '1000'
ORDER BY prod_name;

在这里插入图片描述
除关键字LIKE被REGEXP替代外,这条语句看上去非常像使用LIKE的语句(MySql010——检索数据:过滤数据(使用LIKE操作符结合%、_通配符))。它告诉MySQL:REGEXP后所跟的东西作为正则表达式(与文字正文1000匹配的一个正则表达式)处理。

  1. 检索列prod_name以000结尾的所有行
SELECT 
    prod_name
FROM
    study.products
WHERE
    prod_name REGEXP '.000'
ORDER BY prod_name;

在这里插入图片描述

匹配不区分大小写 MySQL中的正则表达式匹配(自版本3.23.4后)不区分大小写(即,大写和小写都匹配)。为区分大小写,可使用BINARY关键字,如WHERE prod_name REGEXP BINARY ‘JetPack .000’。

2.2、进行OR匹配

为搜索两个串之一(或者为这个串,或者为另一个串),使用|,如下所示:

SELECT 
    prod_name
FROM
    study.products
WHERE
    prod_name REGEXP '1000|2000'
ORDER BY prod_name;

在这里插入图片描述
上面语句中使用了正则表达式1000|2000。|为正则表达式的OR操作符。它表示匹配其中之一,因此1000和2000都匹配并返回。

2.3、匹配几个字符之一

如果你只想匹配特定的字符,可通过指定一组用[和]括起来的字符来完成

SELECT 
    prod_name
FROM
    study.products
WHERE
    prod_name REGEXP '[123] Ton'
ORDER BY prod_name;

在这里插入图片描述
1、这里,使用了正则表达式[123] Ton。[123]定义一组字符,它的意思是匹配1或2或3,因此,1 ton和2 ton都匹配且返回(没有3 ton)
2、正如所见,[]是另一种形式的OR语句。事实上,正则表达式[123]Ton为[1|2|3]Ton的缩写,也可以使用后者。但是,需要用[]来定义OR语句查找什么。

2.4、匹配范围

SELECT 
    prod_name
FROM
    study.products
WHERE
    prod_name REGEXP '[1-5] Ton'
ORDER BY prod_name;

在这里插入图片描述
这里使用正则表达式[1-5] Ton。[1-5]定义了一个范围,这个表达式意思是匹配1到5,因此返回3个匹配行。

2.5、匹配特殊字符

为了匹配特殊字符,必须用\为前导。\-表示查找-,\.表示查找.;其实就是Java中的特殊字符的转义。

SELECT 
    prod_name
FROM
    study.products
WHERE
    prod_name REGEXP '\\.'
ORDER BY prod_name;

在这里插入图片描述
上面表示检索列prod_name中包含.的行。

2.6、匹配字符类

   类					说 明
=====================================================================
[:alnum:] 		任意字母和数字(同[a-zA-Z0-9][:alpha:] 		任意字符(同[a-zA-Z][:blank:] 		空格和制表(同[\\t][:cntrl:] 		ASCII控制字符(ASCII 031127[:digit:] 		任意数字(同[0-9][:graph:][:print:]相同,但不包括空格
[:lower:] 		任意小写字母(同[a-z][:print:] 		任意可打印字符
[:punct:] 		既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 		包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v][:upper:] 		任意大写字母(同[A-Z][:xdigit:] 		任意十六进制数字(同[a-fA-F0-9]

2.7、匹配多个实例

元字符 				说明
=====================================================================
* 				0个或多个匹配
+ 				1个或多个匹配(等于{1,})
? 				0个或1个匹配(等于{0,1})
{n} 			指定数目的匹配
{n,} 			不少于指定数目的匹配
{n,m} 			匹配数目的范围(m不超过255

实例1、

SELECT 
    prod_name
FROM
    study.products
WHERE
    prod_name REGEXP '\\([0-9] sticks?\\)'
ORDER BY prod_name;

在这里插入图片描述
正则表达式\([0-9] sticks?\)需要解说一下。\(匹配),[0-9]匹配任意数字(这个例子中为1和5),sticks?匹配stick和sticks(s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现),\)匹配)。没有?,匹配stick和sticks会非常困难。

实例2、
匹配连在一起的4位数字

SELECT 
    prod_name
FROM
    study.products
WHERE
    prod_name REGEXP '[[:digit:]]{4}'
ORDER BY prod_name;

在这里插入图片描述
如前所述,[:digit:]匹配任意数字,因而它为数字的一个集合。{4}确切地要求它前面的字符(任意数字)出现4次,所以
[[:digit:]]{4}匹配连在一起的任意4位数字。需要注意的是,在使用正则表达式时,编写某个特殊的表达式几乎总是有不止一种方法。上面的例子也可以如下编写:

SELECT 
    prod_name
FROM
    study.products
WHERE
    prod_name REGEXP '[0-9][0-9][0-9][0-9]'
ORDER BY prod_name;

2.8、定位符

目前为止的所有例子都是匹配一个串中任意位置的文本。为了匹配特定位置的文本,需要使用如下列出的定位符。

元字符 		说 明
=============================
^ 			文本的开始
$ 			文本的结尾
[[:<:]] 	词的开始
[[:>:]] 	词的结尾

例如,如果你想找出以一个数(包括以小数点开始的数)开始的所有产品,怎么办?简单搜索[0-9\.](或[[:digit:]\.])不行,因为它将在文本内任意位置查找匹配。解决办法是使用^定位符,如下所示:

SELECT 
    prod_name
FROM
    study.products
WHERE
    prod_name REGEXP '^[0-9\\.]'
ORDER BY prod_name;

在这里插入图片描述

^匹配串的开始。因此,^[0-9\\.]只在.或任意数字为串中第一个字符时才匹配它们。没有^,则还要多检索出4个别的行(那些中间有数字的行)。

与君共享

👉👉👉👉👉最后,有兴趣的小伙伴可以点击下面链接,这里有我整理的MySQL学习博客内容,谢谢~ 🌹🌹🌹🌹🌹

《MySQL数据库学习》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/867262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

18-有假币

题目 居然有假币&#xff01; 现在猪肉涨了&#xff0c;但是农民的工资却不见涨啊&#xff0c;没钱怎么买猪肉啊。nowcoder这就去买猪肉&#xff0c;结果找来的零钱中有假币&#xff01;&#xff01;&#xff01;可惜nowcoder 一不小心把它混进了一堆真币里面去了。只知道假币…

Java项目-苍穹外卖-Day03

员工分页查询功能实现 需求分析和设计 代码开发 先设计类 将对应分页查询的传参类以及结果类进行封装 对应真正返回的为Result<PageResult>Controller /**** param employeePageQueryDTO* return*/GetMapping("/page")ApiOperation("员工分页查询&qu…

【C++】开源:glog日志库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍glog日志库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次…

Mac M1 安装Oracle Java 与 IEDA

文章目录 1 官网下载2 安装IDEA参考 1 官网下载 https://www.oracle.com/ 使用finder中的拖拽进行安装即可 2 安装IDEA https://www.jetbrains.com/zh-cn/idea/download/?sectionmac 同样的&#xff0c;下载完后拖拽安装即可 参考 Mac M1 安装Java 开发环境 https://blog.…

Cmder:从此告别记事本记命令的日子

前言 平时开发中遇到这样那样的命令需要记下来&#xff0c;一般做法是这样。 新建记事本将需要记下的关键命令保存。每次需要使用时&#xff0c;粘贴复制即可。 好像没什么毛病&#xff01;直到遇到了 Cmder。。。 当看到同事分析问题时在 Cmder 里命令快捷键刷刷一顿操作&…

体渲染原理及WebGL实现【Volume Rendering】

体渲染&#xff08;Volume Rendering&#xff09;是NeRF神经场辐射AI模型的基础&#xff0c;与传统渲染使用三角形来显示 3D 图形不同&#xff0c;体渲染使用其他方法&#xff0c;例如体积光线投射 (Volume Ray Casting)。本文介绍体渲染的原理并提供Three.js实现代码&#xff…

【AI底层逻辑】——篇章7(上):海量运算背后的算力支持

目录 引入 一、计算机芯片 1、芯片的制造 2、复杂指令集&精简指令集 3、并行计算的GPU 二、协作计算 1、分布式技术“三论文” 2、不可兼得的CAP定理 3、故障类型 续下篇... 往期精彩&#xff1a; 引入 早在2016年DeepMind就公布了AlphaGo的算法细节&#xff0…

易服客工作室:如何在WordPress网站中举办虚拟活动

您是否正在寻找举办和管理虚拟活动的最佳方式&#xff1f; 也许您想在线举行下一次会议或举办有关您的产品和服务的网络研讨会。您可能担心它太贵&#xff0c;或者您没有技术知识来实现​​它。 在本文中&#xff0c;我们将列出您所需的在线服务的所有设备&#xff0c;并教您…

ubuntu python 查看系统是否可用 cuda

ubuntu python 查看系统是否可用 cuda 初环境与设备查看环境演示效果 本篇文章将介绍ubuntu python 查看系统是否可用 cuda 初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统&#xff1a;ubuntu 22.04 工具&#xff1a;python 3.10.6 设备&#xff1a;Nvidi…

JavaScript 运行机制详解:再谈Event Loop

一、为什么JavaScript是单线程&#xff1f; JavaScript语言的一大特点就是单线程&#xff0c;也就是说&#xff0c;同一个时间只能做一件事。那么&#xff0c;为什么JavaScript不能有多个线程呢&#xff1f;这样能提高效率啊。 JavaScript的单线程&#xff0c;与它的用途有关。…

【二叉树】1-5,理论基础、前中后序遍历的递归法和迭代法、层序遍历

理论基础、前中后序遍历的递归法和迭代法、层序遍历 1&#xff0c;二叉树的种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 2&#xff0c;存储方式链式存储线式存储 3&#xff0c;二叉树的遍历深度优先搜索前序遍历&#xff08;递归法、迭代法&#xff09;中序遍历&#xff0…

无涯教程-Perl - msgrcv函数

描述 此函数从队列ID接收消息,并将消息放入变量VAR中,最大大小为SIZE。 语法 以下是此函数的简单语法- msgrcv ID, VAR, SIZE, TYPE, FLAGS返回值 该函数在错误时返回0,在成功时返回1。 Perl 中的 msgrcv函数 - 无涯教程网无涯教程网提供描述此函数从队列ID接收消息,并将消…

山东布谷科技直播软件开发WebRTC技术:建立实时通信优质平台

在数字化的时代&#xff0c;实时通信成为了人们远程交流的主要方式&#xff0c;目前市场上也出现了很多带有实时通信交流的软件&#xff0c;实时通信符合人们现在的需求&#xff0c;所以在直播软件开发过程中&#xff0c;开发者也运用了实时通信技术为直播软件加入了实时通信的…

什么是CSS Grid布局?什么是Flexbox布局?它们两者有什么不同?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS Grid布局⭐ Flexbox布局⭐ 不同之处⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web…

Chrome浏览器导出插件并安装到其他电脑浏览器上的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

说一下什么是tcp的2MSL,为什么客户端在 TIME-WAIT 状态必须等待 2MSL 的时间?

1.TCP之2MSL 1.1 MSL MSL:Maximum Segment Lifetime报文段最大生存时间&#xff0c;它是任何报文段被丢弃前在网络内的最长时间 1.2为什么存在MSL TCP报文段以IP数据报在网络内传输&#xff0c;而IP数据报则有限制其生存时间的TTL字段&#xff0c;并且TTL的限制是基于跳数 1.3…

【C++基础(十)】C++泛型编程--模板初阶

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 模板 1. 前言2. 函数模板3. 函数模板原理4. 函数…

2023年中国倍率型磷酸铁锂出货量及市场需求分析:插电混动汽车用电池为第一大应用市场[图]

由于新能源锂电池市场的竞争极其激烈&#xff0c;各大电池生产厂商不得不细化研发方向&#xff0c;抢占竞争者少、营利性高的细分专业赛道。因此&#xff0c;“自定义”型单体电池应运而生。其主要分为三个大类&#xff0c;分别为高倍率型电池、长寿命型电池和大容量型电池。这…

Linux安装Oracle数据库!

第一步&#xff0c;调试Linux虚拟机启动&#xff1a; 打开后&#xff0c;报错&#xff0c;如图&#xff1a; 解决&#xff1a; 步骤1&#xff1a;用管理员身份启动cmd&#xff0c;输入&#xff1a;bcdedit 查看hyper-v的状态&#xff0c;这里应该是off关闭状态。 步骤2&#…