MySQL 正则表达式查询

MySQL中正式表达式通常被用来检索或替换符合某个模式的文本内容,根据指定的匹配模式匹配文中符合要求的特殊字符串。

例如,从一个文件中提取电话号码,查找一篇文章中重复的单词或替换用户输入的敏感语汇等,这些地方都可以使用正则表达式。正则表达式强大而且灵活,常用于复杂的查询。

MySQL 中使用 REGEXP 关键字指定正则表达式的字符匹配模式,下表列出了 REGEXP 操作符中常用的匹配列表。

在这里插入图片描述

查询以特定字符或字符串开头的记录

字符“^”匹配以特定字符或者字符串开头的文本。

在 tb_departments 表中,查询 dept_name 字段以字母“C”开头的记录,输入的 SQL 语句如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_name REGEXP '^C';

在 tb_departments 表中,查询 dept_name 字段以“Ch”开头的记录,输入的 SQL 语句如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_name REGEXP '^Ch';

查询以特定字符或字符串结尾的记录

字符“$”匹配以特定字符或者字符串结尾的文本。

在 tb_departments 表中,查询 dept_name 字段以字母“y”结尾的记录,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_name REGEXP 'y$';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       4 | Economy   | 44444     | B         |
|       5 | History   | 55555     | B         |
+---------+-----------+-----------+-----------+
2 rows in set (0.00 sec)

在 tb_departments 表中有两条记录的 dept_name 字段值是以字母 y 结尾的,返回结果有 2 条记录。

在 tb_departments 表中,查询 dept_name 字段以“my”结尾的记录,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_name REGEXP 'my$';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       4 | Economy   | 44444     | B         |
+---------+-----------+-----------+-----------+
1 row in set (0.00 sec)

只有 Economy 是以“my”结尾的,所以查询结果中只有 1 条记录。

用符号“.”代替字符串中的任意一个字符

在 tb_departments 表中,查询 dept_name 字段值包含字母“o”与字母“y”,且两个字母之间只有一个字母的记录,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_name REGEXP 'o.y';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       4 | Economy   | 44444     | B         |
|       5 | History   | 55555     | B         |
+---------+-----------+-----------+-----------+
2 rows in set (0.00 sec)

查询语句中“o.y”指定匹配字符中要有字母 o 和 y,且两个字母之间包含单个字符,并不限定匹配的字符的位置和所在查询字符串的总长度,因此 Economy 和 History 都符合匹配条件。

使用“*”和“+”来匹配多个字符

星号“*”匹配前面的字符任意多次,包括 0 次。加号“+”匹配前面的字符至少一次。

在 tb_departments 表中,查询 dept_name 字段值包含字母“C”,且“C”后面出现字母“h”的记录,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_name REGEXP '^Ch*';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       1 | Computer  | 11111     | A         |
|       3 | Chinese   | 33333     | B         |
+---------+-----------+-----------+-----------+
2 rows in set (0.00 sec)

星号“*”可以匹配任意多个字符,Computer 中字母 C 后面并没有出现字母 h,但是也满足匹配条件。

在 tb_departments 表中,查询 dept_name 字段值包含字母“C”,且“C”后面出现字母“h”至少一次的记录,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_name REGEXP '^Ch+';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       3 | Chinese   | 33333     | B         |
+---------+-----------+-----------+-----------+
1 row in set (0.00 sec)

“h+”匹配字母“h”至少一次,只有 Chinese 满足匹配条件。

匹配指定字符串

正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,若要匹配多个字符串,则多个字符串之间使用分隔符“|”隔开。

在 tb_departments 表中,查询 dept_name 字段值包含字符串“in”的记录,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_name REGEXP 'in';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       3 | Chinese   | 33333     | B         |
+---------+-----------+-----------+-----------+
1 row in set (0.00 sec)

可以看到,dept_name 字段的 Chinese 中包含字符串“in”,满足匹配条件。

在 tb_departments 表中,查询 dept_name 字段值包含字符串“in”或者“on”的记录,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_name REGEXP 'in|on';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       3 | Chinese   | 33333     | B         |
|       4 | Economy   | 44444     | B         |
+---------+-----------+-----------+-----------+
2 rows in set (0.00 sec)

可以看到,dept_name 字段的 Chinese 中包含字符串“in”,Economy 中包含字符串“on”,满足匹配条件。

提示:LIKE 运算符也可以匹配指定的字符串,但与 REGEXP 不同,LIKE 匹配的字符串如果在文本中间出现,就找不到它,相应的行也不会返回。而 REGEXP 在文本内进行匹配,如果被匹配的字符串在文本中出现,REGEXP 将会找到它,相应的行也会被返回。

匹配指定字符串中的任意一个

方括号“[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的文本。

在 tb_departments 表中,查询 dept_name 字段值包含字母“o”或者“e”的记录,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_name REGEXP '[io]';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       1 | Computer  | 11111     | A         |
|       3 | Chinese   | 33333     | B         |
|       4 | Economy   | 44444     | B         |
|       5 | History   | 55555     | B         |
+---------+-----------+-----------+-----------+
4 rows in set (0.00 sec)

从查询结果可以看到,所有返回的记录的 dept_name 字段的值中都包含字母 o 或者 e,或者两个都有。

方括号“[]”还可以指定数值集合。

在 tb_departments 表中,查询 dept_call 字段值中包含 1、2 或者 3 的记录,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_call REGEXP '[123]';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       1 | Computer  | 11111     | A         |
|       2 | Math      | 22222     | A         |
|       3 | Chinese   | 33333     | B         |
+---------+-----------+-----------+-----------+
3 rows in set (0.00 sec)

查询结果中,dept_call 字段值中有 1、2、3 三个数字中的一个即为匹配记录字段。

匹配集合“[123]”也可以写成“[1-3]”,即指定集合区间。例如,“[a-z]”表示集合区间为a~z的字母,“[0-9]”表示集合区间为所有数字。

匹配指定字符以外的字符

“[^字符集合]”匹配不在指定集合中的任何字符。

在 tb_departments 表中,查询 dept_name 字段值包含字母 a~t 以外的字符的记录,输入的 SQL 语句和执行结果如下所示。

mysql> SELECT * FROM tb_departments-> WHERE dept_name REGEXP '[^a-t]';
+---------+-----------+-----------+-----------+
| dept_id | dept_name | dept_call | dept_type |
+---------+-----------+-----------+-----------+
|       1 | Computer  | 11111     | A         |
|       4 | Economy   | 44444     | B         |
|       5 | History   | 55555     | B         |
+---------+-----------+-----------+-----------+
3 rows in set (0.00 sec)

返回记录中的 dept_name 字段值中包含了指定字母和数字以外的值,如 u、y 等,这些字母均不在 a~t 中,满足匹配条件。

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

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

相关文章

mysql修改最大文件数_mysql更改最大打開文件數

1. 查看内核限制# ulimit -n655352. 修改 my.cnf 限制# vi /etc/my.cnf[mysqld]open_files_limit 655353. 重启 mysqld# /etc/init.d/mysql restart4. 查看结果mysql>show global variables like %open%;| open_files_limit | 65535 || table_open_cache | 1…

MySQL 插入语句

数据库与表创建成功以后,需要向数据库的表中插入数据。在 MySQL 中可以使用 INSERT 语句向数据库已有的表中插入一行或者多行元组数据。 基本语法 INSERT 语句有两种语法形式,分别是 INSERT…VALUES 语句和 INSERT…SET 语句。 1 INSERT…VALUES语句 …

onmp mysql端口_ONMP 安装教程

之前用过极路由 1s,刷了恩山 H大的固件,发现内置了 web 环境,没想到一个路由器都能跑的动 LNMP。我之前最极限的尝试就是在一个 4刀3年 的 sentris ovz 小鸡上跑过 WordPress ,那台小鸡 配置很低,只有 64M 的内存&…

MySQL 修改数据

MySQL 中&#xff0c;可以使用 UPDATE 语句来修改、更新一个或多个表的数据。 UPDATE 语句的基本语法 使用 UPDATE 语句修改单个表&#xff0c;语法格式为&#xff1a; UPDATE <表名> SET 字段 1值 1 [,字段 2值 2… ] [WHERE 子句 ] [ORDER BY 子句] [LIMIT 子句]语法…

mysql添加索引后查询先用索引吗_mysql 添加索引后 在查询的时候是mysql就自动从索引里面查询了。还是查询的时候有单 独的参数查询索引?...

满意答案llt17112014.06.20采纳率&#xff1a;49% 等级&#xff1a;9已帮助&#xff1a;614人MYSQL创建索引对索引使用方式分两种&#xff1a;1 由数据库查询优化器自动判断否使用索引&#xff1b;2 用户写SQL语句时强制使用索引下面两种索引使用方式进行说明第种自动使用索…

MySQL 删除数据

MySQL 中&#xff0c;可以使用 DELETE 语句来删除表的一行或者多行数据。 删除单个表中的数据 使用 DELETE 语句从单个表中删除数据&#xff0c;语法格式为&#xff1a; DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]语法说明如下&#xff1a; <表…

MySQL 视图简析

认识视图 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实表一样&#xff0c;视图包含一系列带有名称的列和行数据&#xff0c;但视图并不是数据库真实存储的数据表。 视图是从一个、多个表或者视图中导出的表&#xff0c;包含一系列带有名称的数据列和若干条数据行。…

win7 vs2017 程序报错_windows + VS2017 配置libpytorch

因为项目对实时性的要求&#xff0c;尝试一波c直接调用libpytorch。实现的同时&#xff0c;整理了网上的相关资料&#xff0c;希望对效率追求的同学提供一份帮助。0.下载准备下载安装VS2017 和 cmake &#xff08;3.0版本以上&#xff09;记得把bin目录添加到环境变量path中。这…

jdbc mysql api_JDBC Api详解

一.什么是JDBCJDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准&#xff0c;据此可以构建更高级的工具和接口&#xff0…

MySQL 修改视图

修改视图是指修改 MySQL 数据库中存在的视图&#xff0c;当基本表的某些字段发生变化时&#xff0c;可以通过修改视图来保持与基本表的一致性。 基本语法 可以使用 ALTER VIEW 语句来对已有的视图进行修改。 语法格式如下&#xff1a; ALTER VIEW <视图名> AS <SE…

php mysql 冒号_php – 使用pdo在搜索变量中使用冒号(:)进行查询

我有一个恼人的问题.我正在尝试做一些简单的事情,比如从db获取一个单元格值.这是你可以用db做的最基本的事情…给我一个值,其中有一个具有此值的单元格….问题是搜索查询包含冒号(:).我在一个准备好的语句的类中使用pdo函数,但没有运气.我已经尝试了一切,甚至将查询分开,因此它…

MySQL 删除视图

删除视图是指删除 MySQL 数据库中已存在的视图。删除视图时&#xff0c;只能删除视图的定义&#xff0c;不会删除数据。 基本语法 可以使用 DROP VIEW 语句来删除视图。 语法格式如下&#xff1a; DROP VIEW <视图名1> [ , <视图名2> …]其中&#xff1a;<视…

python计算经纬度之间的距离_python函数——根据经纬度计算距离公式的错误及修正...

函数import mathdef cal_dis(latitude1,longitude1,latitude2,longitude2):latitude1 (Math.PI/180)*latitude1latitude2 (Math.PI/180)*latitude2longitude1 (Math.PI/180)*longitude1longitude2 (Math.PI/180)*longitude2#因此AB两点的球面距离为:{arccos[sinb*sinycosb*c…

MySQL 自定义函数

在使用 MySQL 的过程中&#xff0c;MySQL 自带的函数可能完成不了我们的业务需求&#xff0c;这时候就需要自定义函数。 自定义函数是一种与存储过程十分相似的过程式数据库对象。它与存储过程一样&#xff0c;都是由 SQL 语句和过程式语句组成的代码片段&#xff0c;并且可以…

mysql frm 英文全称_FRM考试是中文还是英文?

FRM(Financial Risk Manager)是全球金融风险管理领域顶级的权威国际资格认证&#xff0c;由美国“全球风险管理协会”(Global Association of Risk Professionals &#xff0c;简称daoGARP)设立。所以全球的FRM考试都是英文的试卷。FRM考试是全英文考试&#xff0c;但其实要求并…

mysql业务数据库回退_理解MySQL数据库事务-隔离性

Transaction事务是指一个逻辑单元&#xff0c;执行一系列操作的SQL语句。事务中一组的SQL语句&#xff0c;要么全部执行&#xff0c;要么全部回退。在Oracle数据库中有个名字&#xff0c;叫做transaction ID在关系型数据库中&#xff0c;事务必须ACID的特性。原子性&#xff0c…

ply补全为立方体_PLY文件格式

一、PLY简介PLY文件格式是Stanford大学开发的一套三维mesh模型数据格式&#xff0c;图形学领域内很多著名的模型数据&#xff0c;比如Stanford的三维扫描数据库(其中包括很多文章中会见到的Happy Buddha, Dragon, Bunny兔子)&#xff0c;Geogia Tech的大型几何模型库&#xff0…

MySQL 修改存储过程

MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。 MySQL 中修改存储过程的语法格式如下&#xff1a; ALTER PROCEDURE 存储过程名 [ 特征 ... ]特征指定了存储过程的特性&#xff0c;可能的取值有&#xff1a; CONTAINS SQL 表示子程序包含 SQL 语句&#xff0c;但不包含读…

python 可执行文件打包_使用可执行文件打包Python库

通常,当整个项目适合单个模块文件时,您只将python包作为模块分发.如果您的项目比这更复杂,通常最好将项目构造为包含__init__.py文件的包.这是您的项目看起来像转换为包的内容Project/|-- README|-- requirement.txt|-- setup.py|-- scripts/| |-- driver.py|-- driver/| |-- _…

MySQL 删除存储过程

当 MySQL 数据库中存在废弃的存储过程时&#xff0c;我们需要将它从数据库中删除。 MySQL 中使用 DROP PROCEDURE 语句来删除数据库中已经存在的存储过程。语法格式如下&#xff1a; DROP { PROCEDURE | FUNCTION } [ IF EXISTS ] <过程名>语法说明如下&#xff1a; 过…