1.前言
最近遇到MySQL模糊查询的问题,发现MySQL也支持正则表达式。其中,like语句是完全匹配,regexp是部分匹配。
2.完全匹配like
2.1 like模糊查询
like支持的正则包括%和_。其中%代表任意个字符,
_
代表任意一个字符。
2.2 常用方式
_
和%的使用
select * from user where name like '张_林';
代表查询user表中name为张X林的用户信息
select * from user where name like '%三%';
代表查询user表中name含有”三”的用户信息
2.3.escape自定义转义符
如果我就真的要查%或者,怎么办呢?使用escape自定义转义符,escape后面就是转义符,转义字符后面的%或就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符作用
Sql代码
select username from gg_user where username like '%xiao/_%' escape '/';
查找含有xiao_的名字
select username from gg_user where username like '%xiao/%%' escape '/';
查找含有xiao%的名字
3.部分匹配regexp
3.1 基本使用
- 查找以两个数字开头的ptitle字段
SELECT * FROM xm_passport.tb_user_verification where ptitle regexp '^[[:digit:]]{2}'
此处的正则表达式和egrep的大部分类似。
- 开头和结尾 ^与$
- 单个字符
[a-z]
[^a-z]
.(任意单个字符) - 重复之前的字符或字符串次数 * 任意次,? 0次或1次,{m,n}至少m次,至多n次
- 字符与字符集
[:digit:] 数字 [:alpha:] 字母 [:space:] 空格 [:punct:] 标点符号
3.2 regexp的完全匹配
- 查找由3个数字组成的ptitle字段
SELECT * FROM xm_passport.tb_user_verification where ptitle regexp '^[[:digit:]]{3}$'