MySql官方手册学习笔记2MySql的模糊查询和正则表达式
SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。在 MySQL中,SQL的模式默认是忽略大小写的。下面给出一些例子。注意使用SQL模式时,不能使用=或!=;而应使用LIKE或NOTLIKE比较操作符。
要想找出以“b”开头的名字:
mysql> SELECT*FROMpetWHEREnameLIKE"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> SELECT*FROMpetWHEREnameLIKE"%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> SELECT*FROMpetWHEREnameLIKE"%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> SELECT*FROMpetWHEREnameLIKE"_____";
+-------+--------+---------+------+------------+-------+
|name |owner |species|sex |birth |death|
+-------+--------+---------+------+------------+-------+
|Claws|Gwen |cat |m |1994-03-17|NULL |
|Buffy|Harold|dog |f |1989-05-13|NULL |
+-------+--------+---------+------+------------+-------+
由MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOTREGEXP操作符(或RLIKE和NOTRLIKE,它们是同义词)。
扩展正则表达式的一些字符是:
· ‘."匹配任何单个的字符。
· 字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
· “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。
为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询:
为了找出以“b”开头的名字,使用“^”匹配名字的开始:
mysql> SELECT*FROMpetWHEREnameREGEXP"^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> SELECT*FROMpetWHEREnameREGEXPBINARY"^b";
为了找出以“fy”结尾的名字,使用“$”匹配名字的结尾:
mysql> SELECT*FROMpetWHEREnameREGEXP"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> SELECT*FROMpetWHEREnameREGEXP"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模式那样。
为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:
mysql> SELECT*FROMpetWHEREnameREGEXP"^.....$";
+-------+--------+---------+------+------------+-------+
|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> SELECT*FROMpetWHEREnameREGEXP"^.{5}$";
+-------+--------+---------+------+------------+-------+
|name |owner |species|sex |birth |death|
+-------+--------+---------+------+------------+-------+
|Claws|Gwen |cat |m |1994-03-17|NULL |
|Buffy|Harold|dog |f |1989-05-13|NULL |
+-------+--------+---------+------+------------+-------+
相关文章
- 数据库Linux实现MySQL数据库管理(linux按照mysql)
- MySQL中使用正则表达式替换文本(mysql正则表达式替换)
- MySQL官方入门教程:学习与掌握(mysql官方教程)
- MySQL数据比较:简化数据比对任务(mysql数据比对工具)
- 远程服务器构建MySQL数据库的连接(远程服务器链接mysql)
- MySQL中实现字符串转换的方法(mysql字符串转换)
- 【长沙】MySQL培训班:学习走向数据库专业人士(长沙mysql培训)
- Mysql官方手册:掌握完美数据库管理(mysql官方手册)
- 重装MySQL服务:恢复系统功能(重启mysql服务)
- 轻松使用DW连接MySQL数据库(dw链接mysql数据库)
- MySQL如何查找并去除重复记录(mysql查出重复数据)
- MySQL管理:精准操控瞬息万变的数据库(mysql管理器)
- MySQL如何给表加上有效的索引(mysql给表加索引)
- MySQL中的二进制数据存储(mysql二进制数据)
- MySQL查询:深入解析死锁(mysql查询死锁)
- MySQL存储过程开发实践:一个简单的实例(mysql存储过程案例)
- MySQL组合索引前缀优化技巧(mysql组合索引前缀)
- MySQL正则表达式实现中文匹配(mysql正则匹配中文)
- 使用MySQL正则表达式进行字符串提取(mysql正则提取字符串)
- MySQL字段必须有主键约束25字。(mysql字段主键)
- MySQL正则表达式匹配数字:更有效的数据库搜索和筛选。(mysql正则匹配数字)
- MySQL授权方式:安全管理之道(mysql的授权方式)
- MySQL正则表达式实现提取(mysql 正则 提取)
- MySQL如何使用正则表达式截取字符串(mysql正则截取)
- 快速掌握常用Mysql语句,让你的MySQL更强大(常用mysql语句)
- 修复Linux下MySQL忘记密码的技巧(linux忘记mysql密码)
- MySQL限制中文输入,需要注意哪些问题(mysql中不能输入中文)
- 解决MySQL中遇到的10038错误,实现数据库高效稳定运行(mysql中10038)
- MySQL数据库恢复之gz文件简易指南(.gz mysql)
- MySQL创建表示例快速掌握MYSQL基础操作(mysql中创建表的例子)
- MySQL下载及安装教程快速掌握MySql下载及安装方法,更高效地使用MySql数据库(mysql下载了在哪)
- MYSQL离线使用方法大揭秘不联网也能愉快地使用MySQL(mysql 不联网吗)
- MySQL中的不等于操作与正则表达式无关(mysql不等于正则)
- 如何处理MySQL的不正常断开问题(mysql不正常断开)
- MySQL正则表达式匹配问题的解决方式(mysql 不匹配正则)