MySQL数据库----通配符,正则表达式

目录

1,通配符

定义: 用来匹配值的一部分的特殊字符。通配符本身实际时SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符。

为了在句子中使用通配符,必须使用LIKE操作符。LIKE指示MySQL后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。

1.1,百分号(%)通配符

...
% 表示任何字符出现任意次数。

【例1】:为了找出所有以词 jet 起头的字段。

SELECT prod_id , prod_name from products WHERE prod_name LIKE 'jet%';

...

【例2】:表示匹配任何位置包含文本 anvil 的值

SELECT prod_id , prod_name FROM products WHERE prod_name LIKE '%anvil%';

...

【例3】:找出以s起头,以e结尾的所有字段

SELECT prod_name FROM products WHERE prod_name LIKE 's%e';

1.2,下划线(_)通配符

...
与 % 类似,但仅代表单个字符

举个例子:

SELECT prod_id , prod_name FROM products WHERE prod_name LIKE '_ ton anvil';

结果

1 ton anvil

2 ton anvil

如果换成 %

结果

0.55 ton anvil

1 ton anvil

2 ton anvil
【例 1】查询名字为三个字符且中间字符为 "a" 的所有用户:

SELECT * FROM users WHERE name LIKE 'a ';

...

【例 2】查询名字以 "J" 开头且第二个字符任意的所有用户:

SELECT * FROM users WHERE name LIKE 'J_';

1.3,方括号( [] )通配符

功能:用于指定字符集合,代表方括号内的任意一个字符。

【例 1】查询名字第一个字符是 "A"、"B" 或 "C" 的所有用户

SELECT * FROM users WHERE name LIKE '[ABC]%';

...

【例 2】查询名字中包含 "a"、"e" 或 "i" 的所有用户:

SELECT * FROM users WHERE name LIKE '%[aei]%';

1.3,方括号( ^ )通配符

功能:在方括号内使用时,表示否定,即匹配不在方括号内的任意一个字符。

【例 1】查询名字第一个字符不是 "A"、"B" 或 "C" 的所有用户:

SELECT * FROM users WHERE name LIKE '[^ABC]%';

1.4,反斜杠(\)通配符

【例 1】查询名字中包含字符 "%" 的所有用户:

SELECT * FROM users WHERE name LIKE '%\%%';

1.5,注意事项

通配符很有用,但是是有代价的。
通配符搜索的处理一般要比前面讨论的其他搜索花时间更长。

1,不要过度使用通配符。

2,尽量不要把它们用在搜索模式的开始处。

3,仔细注意他通配符的位置

2,正则表达式

定义 :正则表达式是用来匹配文本的特殊的串

2.1,基本字符匹配

关键字:REGEXP

2.1.1 匹配文本 '文本' 表示包含"文本" 的字符串

【例】检索列 prod_name 包含文本 1000 的所有行。

SELECT prod_name FROM products WHERE prod_name REGEXP '1000';

其中 REGEXP '1000' 表示包含 1000 文本。

【注意】: 正则表达式可能会降低性能。

2.1.2 进行OR匹配,搜索两个串之一 '文本1|文本2|文本3'

【例】检索列 prod_name 包含文本 1000 或者 2000 的所有行。

SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000';

2.1.3 匹配单一特定字符 [123]

【例】匹配 prod_name 字段文本包含 1 ton 或者 2 ton 或者 3 ton 的所有行

SELECT prod_name FROM products WHERE prod_name REGEXP '[123] ton';

123\] 表示匹配 1 或者 2 或者 3 ### 2.2,匹配范围 集合可用来定义要匹配的一个或多个字符。例如,下面的集合要匹配数字 0到9 \[0123456789

为了简化这种集合,可使用 - 来定义一个范围。如 [0-9]

不一定是数字,也可以是字母 如 [a-z]

【例】

SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] ton';

2.3,匹配特殊字符

正则表达式语言由具有特定含义的特殊字符构成,我们已经看到 [] | - 等,如果你要匹配这些特殊字符,该怎么做呢?

为了匹配特殊字符,必须用 \ 为前导。

【例】找出 vend_name 字段文本中包含 - 字符的所有行

SELECT vend_name FROM vendors WHERE vend_name REGEXP '\-'

转义字符,

项目 Value
\\f 换页
\\n 换行
\\r 回车
\\t 制表
\\v 纵向制表
项目 Value
* 0个或1个匹配
+ 1个或多个匹配
? 0个或1个匹配
{n} 指定数目匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围
相关推荐
逍遥德2 小时前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring
笨蛋不要掉眼泪2 小时前
Redis哨兵机制全解析:原理、配置与实战故障转移演示
java·数据库·redis·缓存·bootstrap
Coder_Boy_3 小时前
基于SpringAI的在线考试系统-整体架构优化设计方案
java·数据库·人工智能·spring boot·架构·ddd
fen_fen11 小时前
Oracle建表语句示例
数据库·oracle
砚边数影13 小时前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库
orange_tt13 小时前
Djiango配置Celery
数据库·sqlite
云小逸14 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
·云扬·14 小时前
MySQL Binlog落盘机制深度解析:性能与安全性的平衡艺术
android·mysql·adb
肉包_51114 小时前
两个数据库互锁,用全局变量互锁会偶发软件卡死
开发语言·数据库·c++
霖霖总总14 小时前
[小技巧64]深入解析 MySQL InnoDB 的 Checkpoint 机制:原理、类型与调优
数据库·mysql