模式匹配是数据库的一项标准化功能,一般的数据库都会提供两个模式检索符号_和%,已经模式检索关键字like、not like。
_代表匹配单个字符,而%表示匹配0到多个字符。like表示包含,而not like表示不包含。
除了标准的模式匹配外,Mysql还提供了模式匹配的拓展——正则匹配。
创建一张学生表
CREATE TABLE `student` (
`name` char(30) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表中的记录如下
name |
张三 |
李四 |
张三丰 |
王五 |
吴五 |
正则匹配相关的关键字是rlike和not rlike,正则式中支持了一些拓展的匹配符:
1.ab:表示字符a且字符b,即串'ab'
2.点号.:表示匹配任意的单个字符
找出姓名中姓张的人名
select * from student where name rlike '张.';
需要注意的是.只管匹配一个字符,而不理会该字符后面是否还有字符,输出结果如下
name |
张三 |
张三丰 |
3.-:表示一个联系区间a-z表示所有小写字母,0-9表示所有数字
4.[]:表示取其中的一个字符,[a-z]表示取小写字母中的一个,[ab]表示取字符a或者字符b
5.*:用来表示数量,0个或者多个,[a-z]*表示多个字符
6.^:表示开头匹配
查找姓名中以张开头的
select * from student where name rlike '^张';
输出结果
name |
张三 |
张三丰 |
7.&:表示结尾匹配
查找姓名中以五结尾的
select * from student where name rlike '五$';
输出结果
name |
王五 |
吴五 |