MySQL必知必会》正则表达式
《MySQL必知必会》正则表达式
正则表达式
1.1、关键字 REGEXP
正则表达式的使用需要用到关键字 REGEXP 。
select prod_name
from products
where prod_name regexp '1000';

从效果看和关键字 LIKE 有相似之处。但只从这个例子中看不出差别,而且使用正则表达式还会降低性能。
但是如果用 LIKE 替换上面的句子,是查询不到数据的。
因为 LIKE 是匹配整个列内的全文本才会返回数据,要想做到和 REGEXP 一样的效果,要使用通配符或者拼接函数才行。
正则表达式是需要配合起来使用才能看到它的扩展性。
select prod_name
from products
where prod_name regexp '.000';

. 在正则表达式中表示任意一个字符。
以上例子使用的是数字匹配,要知道 MySQL 3.23.4+ 正则表达式匹配都是不区分大小写的。
1.2、OR 匹配 ‘ | ’
select prod_name
from products
where prod_name regexp 'ton|1000|2000';

使用 | 可以起到 or 的作用,要注意,不要有多余的空格,将会影响匹配。可以给出两个或两个以上的条件。
1.3、匹配几个字符之一
select prod_name
from products
where prod_name regexp '[125] ton';

用 [ ] 定义一组字符,以上的例子表示匹配 1 2 5 三个字符。注意 ton 前是有一个空格的。匹配的是 ‘1 ton' , '2 ton' ,'5 ton' 这三个字符串。
还有一种写法,是使用 |
select prod_name
from products
where prod_name regexp '[1|2|5] ton';
得到的结果是和上面的一样的。
但是要注意,下面这样写是得不到预期结果的。
select prod_name
from products
where prod_name regexp '1|2|5 ton';

因为上面写法告诉 MySQL ,将匹配 1 , 2 ,5 ton 单个字符串
此外,还可以使用 ^ 来匹配这些字符以外的列。
select prod_name
from products
where prod_name regexp '[^123]';

^ 当然也是不能匹配 NULL 值的列的。
1.4、匹配范围
select prod_name
from products
where prod_name regexp '[1-5] ton';

' - ' 表示范围,1-5,表示1、2、3、4、5 。
a-z 表示任意字母范围。
1.5、特殊字符
上面提到 . 表示任意一个字符,那么如果需要匹配 '.' 要怎么才能让MySQL知道不去转义它?
答案是 反斜杆 \ 。
select prod_name
from products
where prod_name regexp '\\.';

还可以引用元字符:
| 元字符 | 说明 |
|---|---|
| \\f | 换页 |
| \\n | 换行 |
| \\r | 回车 |
| \\t | 制表 |
| \\v | 纵向制表 |
匹配 \ 需要 \\\ 来表示。
1.6、匹配字符类

1.7、匹配多个实例
select prod_name
from products
where prod_name regexp '\\([1-5] sticks?\\)';

\\( :匹配 ( ;\\) :匹配 )
[1-5] : 匹配数字 1 -5 的范围;
sticks? :需要拆分为 stick 和 s? 来看待,stick :匹配全文
s? : 表示 ? 前面的 s 为匹配0或1个,即为可选。
重复元字符说明如下表:

结合上表匹配字符类的元字符,还可以
select prod_name
from products
where prod_name regexp '[[:digit:]]{4}';

[:digit:] :表示匹配任意数字 ,{4} : 表示出现四次。
当然还可以有其他写法,如下:
select prod_name
from products
where prod_name regexp '[0-9][0-9][0-9][0-9]';
1.8、定位符
定位元字符说明如下:

想找以任意数字作为开头的产品名:
select prod_name
from products
where prod_name regexp '^[1-9]';

想找以任意数字作为结尾的产品名:
select prod_name
from products
where prod_name regexp '[0-9]$';

注意 ^ 的两种用法
用在[ ] 内表示否定该集合,用在 [ ] 外表示文本的开始处。
MySQL必知必会》正则表达式的更多相关文章
- 《MySQL必知必会》[01] 基本查询
<MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...
- mysql必知必会
春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...
- 《MySQL必知必会》整理
目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...
- mysql 必知必会总结
以前 mysql 用的不是很多, 2 天看了一遍 mysql 必知必会又复习了一下基础. 200 页的书,很快就能看完, 大部分知识比较基础, 但还是了解了一些以前不知道的知识点.自己做一个备份,随 ...
- MySql必知必会实战练习(三)数据过滤
在之前的博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,MySql必知必会实战练习(二)数据检索中介绍了所有的数据检索操作,下面对数据过滤操作进行总结. 1. whe ...
- 读《MySql必知必会》笔记
MySql必知必会 2017-12-21 意义:记录个人不注意的,或不明确的,或不知道的细节方法技巧,此书250页 登陆: mysql -u root-p -h myserver -P 9999 SH ...
- MySql必知必会内容导图
<MySQL必知必会>从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用.子查询.正则表达式和基于全文本的搜索.存储过程.游标.触发器.表约束,等等.通过重点突出的章节,条理 ...
- MySQL必知必会1
MySQL必知必会 了解SQL 什么是数据库:数据库(database)保存有阻止的数据的容器,可以把数据库想象成一个文件柜. 什么是表:表(table) 某种特定类型结构的结构化清单,数据库中的 ...
- 《MySQL必知必会》学习笔记——前言
前言 MySQL已经成为世界上最受欢迎的数据库管理系统之一.无论是用在小型开发项目上,还是用来构建那些声名显赫的网站,MySQL都证明了自己是个稳定.可靠.快速.可信的系统,足以胜任任何数据存储业务的 ...
随机推荐
- Ansible 远程服务器连接 Internet 测试
Email 连接: lonnyliu@126.com 需求 在使用Ansible过程中不可避免需要了解远端服务器是否能够联通外网,以便进行在线安装软件或者其他.对于运维人员来说普遍的办法有 1. 登录 ...
- 集合和Iterator迭代器
集合 集合是java中提供的一种容器,可以用来存储多个数据. 注意: ①.集合只能存放对象.比如你存一个 int 型数据 1放入集合中, 其实它是自动转换成 Integer 类后存入的,Java中每一 ...
- 使用vuex做列表数据过滤
功能需求 展示一个表格,表格包含选项有" 姓名 年龄 是否显示"三个列表项 是否显示列表项是可操作开关,点击切换打开/关闭 将表格中开关为打开状态的列表项,在另一个表格中显示 需求 ...
- It还是高薪行业不?—软件测试
It还是高薪行业不?—软件测试 谁都希望拿高薪,但是并不是所有人.所有地方都能的:甚者培训出来还不能就业的大有人在,也不是所有人都适合培训后就业(年龄.学历.专业.期望就业地点.不同行业转行还是有很大 ...
- Django学习路22_empty为空,forloop.counter 从1计数,.counter0 从0计数 .revcounter最后末尾数字是1,.revcounter0 倒序,末尾为 0
当查找的数据不存在,返回为 空时 在 html 中使用 {%empty%} 语句 进行显示 def getstudents(request): students = Student.objects.a ...
- PHP cal_from_jd() 函数
------------恢复内容开始------------ 实例 把儒略日计数转换为格利高里历法的日期: <?php$d=unixtojd(mktime(0,0,0,6,20,2007));p ...
- MySQL 笔记 —— 中文乱码解决、修改mysql服务端编码
https://blog.csdn.net/qq_19865749/article/details/79235422
- Centos8最小化部署安装OpenStack Ussuri
#!/bin/bash #Centos8最小化部署安装OpenStack Ussuri #共两台主机,分别是一台控制节点,一台计算节点 #.控制节点内存4096M.双网卡,分别为eth0:10.0.0 ...
- SqlServer 多表连接、聚合函数、模糊查询、分组查询应用总结(回归基础)
--exists 结合 if else 以及 where 条件来使用判断是否有数据满足条件 select * from Class where Name like '%[1-3]班' if (not ...
- akka-typed(9) - 业务分片、整合,谈谈lagom, 需要吗?
在讨论lagom之前,先从遇到的需求开始介绍:现代企业的it系统变得越来越多元化.复杂化了.线上.线下各种系统必须用某种方式集成在一起.从各种it系统的基本共性分析:最明显的特征应该是后台数据库的角色 ...