mysql 查询正则表达式
2015-12-22 14:36
597 查看
使用正则表达式
本小节学习如何在Where子句中使用正则表达式来更好的控制数据过滤。
1.基本字符的匹配
SELECT * FROM a1 WHERE name regexp '1000' #匹配名称含有1000的所有行
SELECT * FROM a1 WHERE name regexp '.000' #匹配以000结尾的所有行,(.正则中表示:匹配任意一个字符)
从中可以看到正则表达式能够模拟LIKE使用通配符,注意:在通配符能完成的时候就不用正则,因为正则可能慢点,当然正则也能简化通配符,完成更大的作用。所以要有所取舍。
LIKE与REGEXP的区别:
SELECT * FROM a1 WHERE name LIKE 'a'
SELECT * FROM a1 WHERE name regexp 'a'
下面两条语句第一条不返回数据,第二条返回数据。
原因如下:
LIKE匹配整个列值时,不会找到它,相应的行也不会被返回(除非使用通配符)
REGEXP匹配时,会自动查找并返回结果。
那么REGEXP也能匹配整个列值,使用^和$定位符即可!
匹配不区分大小写
Mysql正则大小写都会匹配,为区分大小写可使用binary关键字,如:
SELECT * FROM a1 WHERE name LIKE binary '%J%' #使用LIKE+通配符匹配大写J
SELECT * FROM a1 WHERE name regexp binary 'j' #使用正则匹配小写j
2.进行OR匹配
|为正则表达式的OR操作符,表示匹配其中之一
SELECT * FROM a1 WHERE name regexp binary 'a|j|G'
3.匹配特定字符
使用[]括起来的字符,将会匹配其中任意单个字符。
SELECT * FROM a1 WHERE name regexp '[12]st'
以上'[12]st'正则表达式,[12]定义一组字符,它的意思是匹配1或2,因此结果如下:
正如所见,[]是另一种OR语句,[123]st可以是[1|2|3]st的缩写,也可以使用后者,注意:1|2|3 st这样不推荐,因为mysql会假定你的意思是匹配'1'或'2'或'3st'除非你把字符|括在一个集合中,如:[1|2|3]st
字符也可以否定,加^则意味着除此之外,如[^123]st意思是匹配除了1st、2st、3st之外的数据。
4.匹配范围
正则表达式可以使用-匹配一个范围,如[0-9]匹配任意数字,无论是1还是11还是10111,[a-z]匹配任意小写字母。
5.匹配特殊字符
如上,./-/[]等是正则表达式的特殊字符,如果要匹配含有这些字符的数据,就需要使用转义(escaping),\\。如\\.表示查找'.'。\\也用来引用元字符(具有特殊含义的字符),如:
\\f:表示换页
\\n:表示换行
\\r:表示回车
\\t:表示制表
\\v:表示纵向制表
Notes:
如果匹配反斜杠本身()则需要使用\\\
为什么Mysql使用两个反斜杠(\),而很多语言使用一个反斜杠转义呢,因为mysql自己解释一个,正则表达式库解释一个。
6.匹配字符串
本小节学习如何在Where子句中使用正则表达式来更好的控制数据过滤。
1.基本字符的匹配
SELECT * FROM a1 WHERE name regexp '1000' #匹配名称含有1000的所有行
SELECT * FROM a1 WHERE name regexp '.000' #匹配以000结尾的所有行,(.正则中表示:匹配任意一个字符)
从中可以看到正则表达式能够模拟LIKE使用通配符,注意:在通配符能完成的时候就不用正则,因为正则可能慢点,当然正则也能简化通配符,完成更大的作用。所以要有所取舍。
LIKE与REGEXP的区别:
SELECT * FROM a1 WHERE name LIKE 'a'
SELECT * FROM a1 WHERE name regexp 'a'
下面两条语句第一条不返回数据,第二条返回数据。
原因如下:
LIKE匹配整个列值时,不会找到它,相应的行也不会被返回(除非使用通配符)
REGEXP匹配时,会自动查找并返回结果。
那么REGEXP也能匹配整个列值,使用^和$定位符即可!
匹配不区分大小写
Mysql正则大小写都会匹配,为区分大小写可使用binary关键字,如:
SELECT * FROM a1 WHERE name LIKE binary '%J%' #使用LIKE+通配符匹配大写J
SELECT * FROM a1 WHERE name regexp binary 'j' #使用正则匹配小写j
2.进行OR匹配
|为正则表达式的OR操作符,表示匹配其中之一
SELECT * FROM a1 WHERE name regexp binary 'a|j|G'
3.匹配特定字符
使用[]括起来的字符,将会匹配其中任意单个字符。
SELECT * FROM a1 WHERE name regexp '[12]st'
以上'[12]st'正则表达式,[12]定义一组字符,它的意思是匹配1或2,因此结果如下:
正如所见,[]是另一种OR语句,[123]st可以是[1|2|3]st的缩写,也可以使用后者,注意:1|2|3 st这样不推荐,因为mysql会假定你的意思是匹配'1'或'2'或'3st'除非你把字符|括在一个集合中,如:[1|2|3]st
字符也可以否定,加^则意味着除此之外,如[^123]st意思是匹配除了1st、2st、3st之外的数据。
4.匹配范围
正则表达式可以使用-匹配一个范围,如[0-9]匹配任意数字,无论是1还是11还是10111,[a-z]匹配任意小写字母。
5.匹配特殊字符
如上,./-/[]等是正则表达式的特殊字符,如果要匹配含有这些字符的数据,就需要使用转义(escaping),\\。如\\.表示查找'.'。\\也用来引用元字符(具有特殊含义的字符),如:
\\f:表示换页
\\n:表示换行
\\r:表示回车
\\t:表示制表
\\v:表示纵向制表
Notes:
如果匹配反斜杠本身()则需要使用\\\
为什么Mysql使用两个反斜杠(\),而很多语言使用一个反斜杠转义呢,因为mysql自己解释一个,正则表达式库解释一个。
6.匹配字符串
相关文章推荐
- 阿里 MYSQL 月报汇总
- MySQL InnoDB 锁表与锁行
- Mysql 存储过程基本语法
- MYSQL DBA大牛
- mysql 存储过程
- mysql分组取每组前几条记录(排名)
- MySQL中优化sql语句查询常用的30种方法
- MySQL用户权限管理
- MYSQL SELECT 过程 转
- MYSQL SELECT 过程 转
- 使用mysql库连接mysql
- ucenter info:can not connect to MySQL server解决办法
- MySQL5.7更改密码时出现ERROR 1054 (42S22): Unknown column 'password' in 'field list'
- 解决MySQL显示中文的问题
- Async.js解决Node.js操作MySQL的回调大坑
- 编译安装MySQL
- MySQLDump在使用之前一定要想到的事情 [转载]
- MySQL错误:2003-Can't connect to MySQL server on 'localhost' (10061)
- mysql修改字符编码
- mysql自定义循环函数