Mysql——通配符和正则表达式的使用

Posted 耶low的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql——通配符和正则表达式的使用相关的知识,希望对你有一定的参考价值。

1.like操作符和百分号通配符

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


查询出表TABLE中NAME字段中任意位置包含i的行:

select * from TABLE where NAME like \'%i%\'

查询出表TABLE中NAME字段中开头位置包含i的行:

select * from TABLE where NAME like \'i%\'

查询出表TABLE中NAME字段中结尾位置包含i的行

select * from TABLE where NAME like \'%i\'

注意:%不能匹配NULL;有一些字段首尾可能会出现空格,为了避免影响匹配结果,可以是同LTrim和RTrim函数去掉首尾的空格。

 

2.下划线通配符

下划线通配符只代表一个字符。

使用方法和%一样,比如查询出表TABLE中NAME为‘AAA’开头的四个字母的行

select * from TABLE where NAME like \'AAA_\'

 

3.正则表达式

除了使用like进行模糊匹配,还可以使用正则表达式进行模糊匹配。

正则表达式操作符:REGEXP

3.1基本字符匹配

查询出表TABLE中,字段NAME以A结尾的且只有两个字母的所有行:

select * from TABLE where NAME regexp \'.A\'

.是正则表达式的特殊字符,代表匹配任意一个字符。

 

3.2进行或(OR)匹配

查询出表TABLE中,字段NAME为AAA或BBB的行:

select * from TABLE where NAME regexp \'AAA|BBB\'

|为正则表达式的或操作符。

 

3.3匹配多个字符

查询出表TABLE中,字段NAME以A或B或C开头,且结尾为DD的行:

select * from TABLE where NAME regexp \'[ABC]DD\'

[ABC]定义一组字符,意思是:匹配A或B或C。

 

3.4范围匹配

查询出表TABLE中,字段NAME以1到9开头,且结尾为A的行:

select * from TABLE where NAME regexp \'[1-9]A\'

[1-9]意为:匹配1到9任意数字,[a-z]意为匹配任意字符。

 

3.5匹配特殊字符

这种问题几乎在每种语言中都会出现,即需要查询的内容中包含特殊字符。这时候就需要转义了。

mysql中转义符为\\\\

查询出表TABLE中,NAME字段包含.的行:

select * from TABLE where NAME regexp \'\\\\.\'

 

3.6正则表达式常用元字符

 

注意:正则表达式匹配不区分大小写,如果需要区分在regexp后面加上关键字:binary

 

以上是关于Mysql——通配符和正则表达式的使用的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL中正则表达式检索数据库

MySQL基础之 标准正则表达式通配符

MySQL中的通配符与正则表达式

MySQL必知必会读书笔记-2(去重,limit,结果的排序,通配符,正则表达式)

MySQL必知必会---通配符与正则表达式

MySQL正则表达式匹配查询