用通配符进行过滤
一、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;
所以只在符号‘.’开始或者数字开始的串才会被匹配。
0-9\\. ↩︎