加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MYSQL教程MySql官方手册学习笔记2 MySql的模糊查询和正则表达式

发布时间:2020-12-12 00:56:54 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL教程MySql官方手册学习笔记2 MySql的模糊查询和正则表达式》要点: 本文介绍了MYSQL教程MySql官方手册学习笔记2 MySql的模糊查询和正则表达式,希望对您有用。如果有疑问,可以联系我们。 SQL 模式匹配允许你使用 “ _ ” 匹配任何单个字符,而 “ %

《MYSQL教程MySql官方手册学习笔记2 MySql的模糊查询和正则表达式》要点:
本文介绍了MYSQL教程MySql官方手册学习笔记2 MySql的模糊查询和正则表达式,希望对您有用。如果有疑问,可以联系我们。

SQL模式匹配允许你使用_匹配任何单个字符,而%匹配任意数目字符(包括零字符).在?MySQL中,SQL的模式默认是忽略大小写的.下面给出一些例子.注意使用SQL模式时,不能使用=!=;而应使用LIKENOT LIKE比较操作符.MYSQL入门

要想找出以b开头的名字:MYSQL入门

?MYSQL入门

mysql>?SELECT * FROM pet WHERE name LIKE 'b%';
+--------+--------+---------+------+------------+------------+
| name???| owner??| species | sex??| birth??????| death??????|
+--------+--------+---------+------+------------+------------+
| Buffy??| Harold | dog?????| f????| 1989-05-13 | NULL???????|
| Bowser | Diane??| dog?????| m????| 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
?

要想找出以fy结尾的名字:MYSQL入门

?MYSQL入门

mysql>?SELECT * FROM pet WHERE name LIKE '%fy';
+--------+--------+---------+------+------------+-------+
| name???| owner??| species | sex??| birth??????| death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat?????| f????| 1993-02-04 | NULL??|
| Buffy??| Harold | dog?????| f????| 1989-05-13 | NULL??|
+--------+--------+---------+------+------------+-------+
?

要想找出包含w的名字:MYSQL入门

?MYSQL入门

mysql>?SELECT * FROM pet WHERE name LIKE '%w%';
+----------+-------+---------+------+------------+------------+
| name?????| owner | species | sex??| birth??????| death??????|
+----------+-------+---------+------+------------+------------+
| Claws????| Gwen??| cat?????| m????| 1994-03-17 | NULL???????|
| Bowser???| Diane | dog?????| m????| 1989-08-31 | 1995-07-29 |
| Whistler | Gwen??| bird????| NULL | 1997-12-09 | NULL???????|
+----------+-------+---------+------+------------+------------+
?

要想找出正好包含5个字符的名字,使用_模式字符:MYSQL入门

?MYSQL入门

mysql>?SELECT * FROM pet WHERE name LIKE '_____';
+-------+--------+---------+------+------------+-------+
| name??| owner??| species | sex??| birth??????| death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen???| cat?????| m????| 1994-03-17 | NULL??|
| Buffy | Harold | dog?????| f????| 1989-05-13 | NULL??|
+-------+--------+---------+------+------------+-------+
?

MySQL提供的模式匹配的其它类型是使用扩展正则表达式.当你对这类模式进行匹配测试时,使用REGEXPNOT REGEXP操作符(RLIKENOT RLIKE,它们是同义词).MYSQL入门

扩展正则表达式的一些字符是:MYSQL入门

??????????.'匹配任何单个的字符.MYSQL入门

??????????字符类[...]匹配在方括号内的任何字符.例如,[abc]匹配abc.为了命名字符的范围,使用一个“-”.[a-z]匹配任何字母,而[0-9]匹配任何数字.MYSQL入门

???????????*?匹配零个或多个在它前面的字符.例如,x*匹配任何数量的x字符,[0-9]*匹配任何数量的数字,而.*匹配任何数量的任何字符.MYSQL入门

  • 如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配).
  • 为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用^在模式的结尾用$.

为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询:MYSQL入门

为了找出以b开头的名字,使用^匹配名字的开始:MYSQL入门

?MYSQL入门

mysql>?SELECT * FROM pet WHERE name REGEXP '^b';
+--------+--------+---------+------+------------+------------+
| name???| owner??| species | sex??| birth??????| death??????|
+--------+--------+---------+------+------------+------------+
| Buffy??| Harold | dog?????| f????| 1989-05-13 | NULL???????|
| Bowser | Diane??| dog?????| m????| 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
?

如果你想强制使REGEXP比较区分大小写,使用BINARY关键字使其中一个字符串变为二进制字符串.该查询只匹配名称首字母的小写‘b'.MYSQL入门

?MYSQL入门

mysql>?SELECT * FROM pet WHERE name REGEXP BINARY '^b';
?

为了找出以fy结尾的名字,使用$匹配名字的结尾:MYSQL入门

?MYSQL入门

mysql>?SELECT * FROM pet WHERE name REGEXP 'fy$';
+--------+--------+---------+------+------------+-------+
| name???| owner??| species | sex??| birth??????| death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat?????| f????| 1993-02-04 | NULL??|
| Buffy??| Harold | dog?????| f????| 1989-05-13 | NULL??|
+--------+--------+---------+------+------------+-------+
?

为了找出包含一个w的名字,使用以下查询:MYSQL入门

?MYSQL入门

mysql>?SELECT * FROM pet WHERE name REGEXP 'w';
+----------+-------+---------+------+------------+------------+
| name?????| owner | species | sex??| birth??????| death??????|
+----------+-------+---------+------+------------+------------+
| Claws????| Gwen??| cat?????| m????| 1994-03-17 | NULL???????|
| Bowser???| Diane | dog?????| m????| 1989-08-31 | 1995-07-29 |
| Whistler | Gwen??| bird????| NULL | 1997-12-09 | NULL???????|
+----------+-------+---------+------+------------+------------+
?

既然如果一个正则表达式出现在值的任何地方,其模式匹配了,就不必在先前的查询中在模式的两侧放置一个通配符以使得它匹配整个值,就像你使用了一个SQL模式那样.MYSQL入门

为了找出包含正好5个字符的名字,使用^$匹配名字的开始和结尾,和5.实例在两者之间:MYSQL入门

?MYSQL入门

mysql>?SELECT * FROM pet WHERE name REGEXP '^.....$';
+-------+--------+---------+------+------------+-------+
| name??| owner??| species | sex??| birth??????| death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen???| cat?????| m????| 1994-03-17 | NULL??|
| Buffy | Harold | dog?????| f????| 1989-05-13 | NULL??|
+-------+--------+---------+------+------------+-------+
?

你也可以使用{n}“重复n次”操作符重写前面的查询:MYSQL入门

?MYSQL入门

mysql>?SELECT * FROM pet WHERE name REGEXP '^.{5}$';
+-------+--------+---------+------+------------+-------+
| name??| owner??| species | sex??| birth??????| death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen???| cat?????| m????| 1994-03-17 | NULL??|
| Buffy | Harold | dog?????| f????| 1989-05-13 | NULL??|
+-------+--------+---------+------+------------+-------+

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读