mysql语法之通配符和正则表达式

本文介绍了MySQL中如何使用通配符`LIKE`和正则表达式`REGEXP`进行数据过滤。`LIKE`操作符包括 `%` 通配符匹配任意数量字符,`_` 通配符匹配单个字符。正则表达式部分讲解了基本字符匹配、OR匹配、匹配特定字符、匹配范围、特殊字符匹配、字符类以及定位符等用法,帮助理解MySQL中复杂的文本搜索功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用通配符进行过滤

一、like操作符


1.百分号(%)通配符

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

mysql>select prod_id, prod_name from products where prod_name like ‘jet%’;

上面这条语句使得找出所有以词jet起头的产品

%告诉MySQL接受jet之后的任意字符,不管它有多少字符

mysql>select prod_id, prod_name from products where prod_name where prod_name like ‘%anvil%’;

搜索模式‘%anvil%’表示匹配任何位置包括文本anvil的值,而不论它之前或之后出现的字符

mysql>select prod_name from products where prod_name like ‘s%e’;

找出以s起头以e结尾的所有产品

注意:

  • 尾空格的存在可能使得你的匹配出现问题
  • %不会匹配NULL

2.下划线(__)通配符

下划线的用途与%一样,单下划线只匹配单个字符而不是多个字符

mysql>select prod_id, prod_name from products where prod_name like ‘_ ton anvil’;

用正则表达式进行搜索

正则表达式是用来匹配文本的特殊的串(字符集合)。

一、使用MYSQL正则表达式

1.基本字符匹配

mysql>select prod_name from products where prod_name regexp ‘1000’ order by prod_name;

匹配的输出:JetPack 1000

除了关键字like被regexp替代外:它告诉MySQL:REGEXP后所跟的东西为正则表达式(与文字正文1000匹配的一个正则表达式)处理。

mysql>select prod_name from products where prod_name regexp ‘.000’ order by prod_name;

匹配的输出:JetPack1000和JetPack 200

‘.’是正则表达式语言中的一个特殊的字符。

它匹配任意一个字符。

因此1000和2000都匹配返回。

请注意以下语句的区别:

  • select prod_name from products where prod_name like ‘1000’ order by prod_name;
  • select prod_name from products where prod_name regexp‘1000’ order by prod_name;

Like匹配整个列。

而regexp在列值内进行匹配。

2.进行OR匹配

mysql> select prod_name from products where prod_name regexp ‘1000|2000’ order by prod_name;

匹配的输出:JetPark1000 和 JetPark 2000

‘1000|2000|3000’:两个以上的or条件

3.匹配几个字符之一

mysql>select prod_name from products where prod_name regexp ‘[123]Ton’ order by prod_name

匹配的输出:1 ton anvil 和 2 ton anvil

‘[]’它的意思是匹配1或2或3

‘[123]Ton’为‘[1|2|3]Ton’的缩写

注意:‘1|2|3 Ton’的意思还会匹配‘1’而不是匹配‘1 Ton’的差异,所以建议使用‘[1|2|3]Ton’。

4.匹配范围

[123456789]->[0-9]

[a-z]匹配任意字字母字符

mysql>select prod_name from products where prod_name regexp ‘[1-5] Ton’ order by prod_name;

5.匹配特殊字符

‘.’:代表所有字符

‘\\.’:利用转义字符这样表达匹配点字符

‘\\\’:匹配反斜杠(\)字符本身

6.匹配字符类

说明
[:alnum:]任意字母和数字(同[a-zA-Z0-9])
[:alpha:]任意字符(同[a-zA-Z])
[:digit:]任意数字(同[0-9])

7.匹配多个实例

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

mysql>select prod_name from products where prod_name regexp ‘\\([0-9] sticks?\\)’ order by prod_name;

匹配的结果:TNT (1 stick)和TNT (5 sticks)

mysql>select prod_name from products where prod_name regexp ‘[[:digit:]]{4}’ order by prod_name;

匹配的结果:JetPack 1000和JetPack 2000,以上语句为匹配连在一起的4位数字

8.定位符

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

mysql>select prod_name from products where prod_name regexp ‘1 order by prod_name;

所以只在符号‘.’开始或者数字开始的串才会被匹配。


  1. 0-9\\. ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值