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模式匹配的更多相关文章

  1. SQL模式匹配

    标准的SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符).在 MySQL中,SQL的模式缺省是忽略大小写的.下面显示一些例子.注意在你使用SQL模式时,你不能使 ...

  2. MySQL 8 模式匹配

    MySQL 提供了两种模式匹配: 标准 SQL 模式匹配 基于扩展正则的模式匹配 SQL 模式匹配使用 LIKE 命令进行模式匹配操作, _ 匹配任意单个字符.% 匹配任意多个字符,包含 0 个字符 ...

  3. MySQL客户端工具的使用与MySQL SQL语句

    MySQL客户端工具的使用 1.MySQL程序的组成 客户端 mysql:CLI交互式客户端程序 mycli:CLI交互式客户端程序;使用sql语句时会有提示信息 mysql_secure_insta ...

  4. mysql sql优化实例

    mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...

  5. jbpm3.2中jbpm.jpdl.mysql.sql文件运行报错的问题

    这是一个很久之前遇到的问题,就是用从官网下下载的jbpm组件,它的jbpm.jpdl.mysql.sql不能正常运行.其原因是该sql文件中有一句语句有错误.现在附上正确的jbpm.jpdl.mysq ...

  6. 程序员实用的 MySQL sql 语句

    这儿只讲究实用,  程序员编程时常用到的 MySQL的 sql语句(不包括基本的 select, update, delete 等语句). 1. 添加一个用户build,并赋予所有权限的命令 gran ...

  7. Atitit.软件GUIbutton与仪表盘--db数据库区--导入mysql sql错误的解决之道

    Atitit.软件GUIbutton与仪表盘--db数据库区--导入mysql sql错误的解决之道 Keyword::截取文本文件后部分 查看提示max_allowed_packet限制 Targe ...

  8. mysql sql语句大全(转载)

      1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 ...

  9. 从运维的角度分析使用阿里云数据库RDS的必要性--你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库

    开宗明义,你不应该在阿里云上使用自建的MySQL or SQL Server数据库,对了,还有Oracle or PostgreSQL数据库. 云数据库 RDS(Relational Database ...

随机推荐

  1. VC++ 学习笔记(序):神一样的语言

    总的来说,我觉得VC++是一门神一样的语言——它是公认最强大.最复杂的:它一切以效率为第一要务,却又不肯落伍,拼命兼容现在的新的语言设计特点.本来在别的语言很容与就避开的问题,在这里要用很高的技巧去设 ...

  2. LESS详解之函数(四)

    之前已经为大家介绍了一些LESS函数,大家应该对之前介绍的有所了解了.下面依旧为大家介绍LESS的函数,附加着一些小例子.希望这些有关LESS的函数能在大家编写LESS的时候有所帮助. saturat ...

  3. c# -- 对象销毁和垃圾回收

    有些对象需要显示地销毁代码来释放资源,比如打开的文件资源,锁,操作系统句柄和非托管对象.在.NET中,这就是所谓的对象销毁,它通过IDisposal接口来实现.不再使用的对象所占用的内存管理,必须在某 ...

  4. [原创]android使用代码生成LayerDrawable的方法和注意事项

    为了有更好的UI体验,一般我们会把button.textview等控件的背景设置上阴影.传统的做法是美工提供一张具有阴影效果的nine patch图,然后将其在xml文件中添加到background属 ...

  5. 出现Assertion failure in -[***** layoutSublayersOfLayer:]

    在自定义的view中使用了[self layoutIfNeeded]方法,在iOS8\9上都没有错误,但是在iOS7上出现了页面错乱,解决方案就是在自定义的view里面添加如下代码: + (void) ...

  6. windbg常用命令

    SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols CPU常用命令 载入sos.dll  执行.load C:\Windows\Micr ...

  7. Mac OS X Tips

    命令行查看Mac OS X版本 $ sw_vers ProductName: Mac OS X ProductVersion: BuildVersion: 14D131 Mac OS X截图 不要使用 ...

  8. GitHub 操作流程示例

    最新文章:Virson's Blog 参考文章: 博客园-Web前端开发,博客园-喻头快跑,GotGitHub 首先.通过github网站新建一个仓库,得到仓库地址 https://github.co ...

  9. jQuery UI--jquery-autohide解读

    // jQuery Autohide v1.0.2 // (c) 2014 Alex Taujenis // MIT License (function($) { return $.fn.autohi ...

  10. 【redmine】密码忘了后重新设置

    有段时间没有使用,忘记了原来的密码,搜索网上有一篇文章,不过版本比较老,和现在文件位置不一样,参考后成功重置了密码,感谢原作者. 原文内第一步一般是不需要的.主要是用ruby命令修改数据库内容. 进入 ...