MySQL SQL模式匹配
MySQL提供标准的SQL模式匹配,SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。。
关于SQL模式匹配:http://dev.mysql.com/doc/refman/5.1/zh/tutorial.html#pattern-matching
1.MySQL仅仅支持多数正则表达式实现的一个很小的子集。
2.SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。;而REGEXP使用扩展正则表达式匹配列值的子串,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。
注意使用SQL模式时,不能使用=或!=;而应使用LIKE或NOT LIKE比较操作符。
看下面的例子:
mysql> select * from tb;
+----+------------+-----+
| id | Name | Age |
+----+------------+-----+
| 1 | changename | 20 |
+----+------------+-----+
1 row in set (0.02 sec)
要想找出正好包含5个字符的名字,使用“_”模式字符:
mysql> select * from tb where name like '_____';
Empty set (0.61 sec)
包含10个字符时,找出了匹配结果。
mysql> select * from tb where name like '__________';
+----+------------+-----+
| id | Name | Age |
+----+------------+-----+
| 1 | changename | 20 |
+----+------------+-----+
1 row in set (0.00 sec)
mysql> select name from tb where name regexp 'cha';
+------------+
| name |
+------------+
| changename |
+------------+
1 row in set (0.06 sec)
mysql> select name from tb where name regexp 'chad';
Empty set (0.00 sec)
扩展正则表达式的一些字符是:
· ‘.’匹配任何单个的字符。
· 字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
· “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。
• 如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
• 为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。
3.默认MySQL中的正则表达式匹配不区分大小写,可使用BINARY关键字区分大小写,如
mysql> select name from tb where name regexp binary'cha';
+------------+
| name |
+------------+
| changename |
+------------+
1 row in set (0.08 sec)
mysql> select name from tb where name regexp binary'Cha';
Empty set (0.00 sec)
4、进行OR匹配:为搜索两个串之一,使用|,如下所示:
mysql> select name from tb where name regexp 'c|a';
+------------+
| name |
+------------+
| changename |
+------------+
1 row in set (0.02 sec)
5、匹配几个字符之一:
匹配任何单一字符。如下所示:
mysql> select name from tb where name regexp '[ca]';
+------------+
| name |
+------------+
| changename |
+------------+
1 row in set (0.02 sec)
正如所见,[]是另一种形式的OR语句。'[ca]'与’c|a’是等价的。
匹配除给定字符外的字符:
mysql> select name from tb where name regexp '^[ca]';
+------------+
| name |
+------------+
| changename |
+------------+
1 row in set (0.00 sec)
6、可使用-来定义一个范围。如[1-9],[a-b]。
mysql> select name from tb where name regexp '[a-c]';
+------------+
| name |
+------------+
| changename |
+------------+
1 row in set (0.00 sec)
mysql> select name from tb where name regexp '[w-z]';
Empty set (0.00 sec)
7、为了匹配特殊字符,必须用\\为前导,例如\\-,\\.等。这种处理即转义(escaping)。
多数正则表达式实现使用单个反斜杠转义特殊字符,但MYSQL要求两个(MYSQL自己解释一个,正则表达式库解释另一个)。
\\也用来引用元字符(具有特殊含义的字符),如下表:
8、为了更方便工作,可以使用预定义的字符集,称为字符类(character class)。
mysql> select name from tb where name regexp '[[:alpha:]]';
+------------+
| name |
+------------+
| changename |
+------------+
1 row in set (0.00 sec)
9、使用正则表达式重复元字符匹配多个实例:
mysql> select name from tb where name regexp 'c{1}';
+------------+
| name |
+------------+
| changename |
+------------+
1 row in set (0.00 sec)
mysql> select name from tb where name regexp 'c{2}';
Empty set (0.00 sec)
10、定位符(为了匹配特定位置的文本):
mysql> select name from tb where name regexp 'e$';
+------------+
| name |
+------------+
| changename |
+------------+
1 row in set (0.00 sec)
mysql> select name from tb where name regexp 'a$';
Empty set (0.00 sec)
11、使REGEXP起类似LIKE的作用,它们的区别在于LIKE匹配整个串而REGEXP匹配子串。利用定位符,通过用^开始每个表达式,用$结束每个表达式。
12、简单的正则表达式测试:可以在不使用数据库表的情况下用SELECT来测试正则表达式。REGEXP检查总是返回0或1(匹配)。
[sql]
mysql> select 'hello' REGEXP'[0-9]';
+------------------------+
| 'hello' REGEXP '[0-9]' |
+------------------------+
| 0 |
+------------------------+
1 row in set (0.00 sec)
本文基于 <使用正则表达式搜索>整理形成。
官方文档:Mysql正则表达式:http://dev.mysql.com/doc/refman/5.1/zh/regexp.html
MySQL SQL模式匹配的更多相关文章
- SQL模式匹配
标准的SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符).在 MySQL中,SQL的模式缺省是忽略大小写的.下面显示一些例子.注意在你使用SQL模式时,你不能使 ...
- MySQL 8 模式匹配
MySQL 提供了两种模式匹配: 标准 SQL 模式匹配 基于扩展正则的模式匹配 SQL 模式匹配使用 LIKE 命令进行模式匹配操作, _ 匹配任意单个字符.% 匹配任意多个字符,包含 0 个字符 ...
- MySQL客户端工具的使用与MySQL SQL语句
MySQL客户端工具的使用 1.MySQL程序的组成 客户端 mysql:CLI交互式客户端程序 mycli:CLI交互式客户端程序;使用sql语句时会有提示信息 mysql_secure_insta ...
- mysql sql优化实例
mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...
- jbpm3.2中jbpm.jpdl.mysql.sql文件运行报错的问题
这是一个很久之前遇到的问题,就是用从官网下下载的jbpm组件,它的jbpm.jpdl.mysql.sql不能正常运行.其原因是该sql文件中有一句语句有错误.现在附上正确的jbpm.jpdl.mysq ...
- 程序员实用的 MySQL sql 语句
这儿只讲究实用, 程序员编程时常用到的 MySQL的 sql语句(不包括基本的 select, update, delete 等语句). 1. 添加一个用户build,并赋予所有权限的命令 gran ...
- Atitit.软件GUIbutton与仪表盘--db数据库区--导入mysql sql错误的解决之道
Atitit.软件GUIbutton与仪表盘--db数据库区--导入mysql sql错误的解决之道 Keyword::截取文本文件后部分 查看提示max_allowed_packet限制 Targe ...
- mysql sql语句大全(转载)
1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 ...
- 从运维的角度分析使用阿里云数据库RDS的必要性--你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库
开宗明义,你不应该在阿里云上使用自建的MySQL or SQL Server数据库,对了,还有Oracle or PostgreSQL数据库. 云数据库 RDS(Relational Database ...
随机推荐
- 前端经常使用插件使用文档 以及demo
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- 一种线程安全的handle
对象引用的正确性在多线程环境下是一个复杂的问题,请参考,处理由引用计数引起的泄漏.简单来说,我们应该尽量减少使用强引用,否则将有可能产生[处理由引用计数引起的泄漏]一文中描述的难以察觉的内存泄漏问题. ...
- [AX]AX2012 Number sequence framework :(三)再谈Number sequence
AX2012的number sequence framework中引入了两个Scope和segment两个概念,它们的具体作用从下面序列的例子说起. 法国/中国的法律要求财务凭证的Journal nu ...
- 代码生成的地址:mygeneration
一个代码生成的地址: https://gitshell.com/shiningrise/mygeneration/
- KIS旗舰版常用数据表
select * from IC_Web2ERPOrders --网上订单 FOrderStatus 14--已发货,6--待发货,2--待配货,1--未审核 (审核后变为2,进入待配货)sele ...
- .NET转Java
懂C#的话,转Java也不是那么难,毕竟,语言语法还是相似的.尝试了下Java,说说自己的体会吧. 一,Java和C#都是完全面向对象的语言.在面向对象编程的三大原则方面,这两种语言接近得不能再接近. ...
- C#中子类与父类的相互转换
1.父类不能直接强制转换成子类 2.子类可以强制转换成父类,但是在父类中只能取父类的字段与方法 因此在一个父类对应多个子类的时候,不知道具体是哪个子类的时候,就可以先声明一个父类的类型.(如例1) 3 ...
- codeforces Restore Cube(暴力枚举)
/* 题意:给出立方体的每个顶点的坐标(是由源坐标三个数某几个数被交换之后得到的!), 问是否可以还原出一个立方体的坐标,注意这一句话: The numbers in the i-th output ...
- Android之TextView的Span样式源码剖析
Android中的TextView是个显示文字的的UI类,在现实中的需求中,文字有各式各样的样式,TextView本身没有属性去设置实现,我们可以通过Android提供的 Spannab ...
- teamcity设置
建立项目后首先要设置svn地址,并绑定 名字随便起 url是svn的地址 之后来做build step 有一个按钮可以自动检测,一般都能检测出来 执行这个似乎需要代理装什么东西 可以查看目前代理有那些 ...