Mysql查询语句正则匹配

来源:互联网 发布:学校校园铃声软件 编辑:程序博客网 时间:2024/06/06 14:14

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}$'
0 0
原创粉丝点击