【转】MYSQL入门学习之二:使用正则表达式搜索

转载地址:http://www.2cto.com/database/201212/173869.html

一、正则表达式介绍

www.2cto.com

正则表达式是用来匹配文本的特殊的串(字符集合)。

二、使用MySQL正则表达式

1、MySQL仅仅支持多数正则表达式实现的一个很小的子集。

2、LIKE匹配整个列值;而REGEXP匹配列值的子串,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。看下面的例子:

www.2cto.com

[sql]

mysql>select username from v9_admin where username like ‘space‘;

Emptyset (0.00 sec)

mysql>select username from v9_admin where username REGEXP ‘space‘;

+-----------+

|username  |

+-----------+

|warmspace |

+-----------+

1 rowin set (0.02 sec)

3、默认MySQL中的正则表达式匹配不区分大小写,可使用BINARY关键字区分大小写,如

[sql]

mysql>select username from v9_admin

-> where username REGEXP BINARY‘SPACCE‘;

Emptyset (0.04 sec)

4、进行OR匹配:为搜索两个串之一,使用|,如下所示:

[sql]

mysql>select roleid from v9_admin_role

-> where roleid REGEXP ‘1|3‘;

+--------+

|roleid |

+--------+

|      1 |

|      3 |

+--------+

2 rowsin set (0.00 sec)

5、匹配几个字符之一:匹配任何单一字符。如下所示:

[sql]

mysql>select name from v9_collection_node

-> where name REGEXP ‘005-[123]‘;

+-----------------+

|name            |

+-----------------+

|101-02-01-005-2 |

|101-02-01-005-1 |

|101-02-01-005-3 |

+-----------------+

3 rowsin set (0.00 sec)

正如所见,[]是另一种形式的OR语句。‘005-[123]‘与’005-[1|2|3]’是等价的。

匹配除给定字符外的字符:

[sql]

mysql>select name from v9_collection_node

-> where name REGEXP ‘005-[^123]‘;

+-------------------+

|name              |

+-------------------+

|101-02-01-005-4.2 |

|101-02-01-005-4   |

|101-02-01-005-5   |

+-------------------+

3 rowsin set (0.00 sec)

6、可使用-来定义一个范围。如[1-9],[a-b]。

[sql]

mysql>select name from v9_collection_node

-> where name REGEXP ‘005-[1-3]‘;

+-----------------+

|name            |

+-----------------+

|101-02-01-005-2 |

|101-02-01-005-1 |

|101-02-01-005-3 |

+-----------------+

3 rowsin set (0.00 sec)

7、为了匹配特殊字符,必须用\\为前导,例如\\-,\\.等。这种处理即转义(escaping)。

多数正则表达式实现使用单个反斜杠转义特殊字符,但MYSQL要求两个(MYSQL自己解释一个,正则表达式库解释另一个)。

\\也用来引用元字符(具有特殊含义的字符),如下表:

8、为了更方便工作,可以使用预定义的字符集,称为字符类(character class)。

[sql]

mysql> select name fromv9_collection_node

-> where name REGEXP ‘[[:digit:]]‘;

+-------------------+

| name              |

+-------------------+

| 101-10-01-002-1   |

| 101-02-01-005-4.2 |

| 101-02-01-005-2   |

| 101-02-01-005-1   |

| 101-02-01-005-3   |

| 101-02-01-005-4   |

| 101-02-01-005-5   |

| 101-10-01-002-2   |

| 101-11-04-001-1   |

+-------------------+

9 rowsin set (0.00 sec)

9、使用正则表达式重复元字符匹配多个实例:

[sql]

mysql> select name fromv9_collection_node

-> where name REGEXP ‘1{2}‘;

+-----------------+

| name            |

+-----------------+

| 101-11-04-001-1 |

+-----------------+

1 rowin set (0.00 sec)

10、定位符(为了匹配特定位置的文本):

[sql]

mysql> select name from v9_collection_node

-> where name REGEXP ‘2$‘;

+-------------------+

| name              |

+-------------------+

| 101-02-01-005-4.2 |

| 101-02-01-005-2   |

| 101-10-01-002-2   |

+-------------------+

3 rows in 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)

时间: 2024-10-06 20:14:59

【转】MYSQL入门学习之二:使用正则表达式搜索的相关文章

【转】MYSQL入门学习之三:全文本搜索

转载地址:http://www.2cto.com/database/201212/173873.html 一.理解全文本搜索 www.2cto.com 1.MyISAM支持全文本搜索,而InnoDB不支持. 2.在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词.MySQL创建指定列中各词的一个索引,搜索可以针对这些词进行.这样MySQL可以快速有效地决定哪些词匹配,哪些词不匹配,它们匹配的频率,等等. 二.使用全文本搜索 1.为了进行全文本搜索,必须索引被搜索的列,

【转】MYSQL入门学习之十一:触发器的基本操作

转载地址:http://www.2cto.com/database/201212/176781.html 触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):  www.2cto.com DELETE: INSERT: UPDATE: 使用触发器,需要MySQL5或之后的版本支持. 一.触发器基本操作 1.创建触发器 创建触发器时,需要给出4条信息: 唯一的触发器名:(虽然MySQL5允许不同的表上的触发器名称相同,但一般最好不要这么做

【转】MYSQL入门学习之十三:自定义函数的基本操作

转载地址:http://www.2cto.com/database/201212/177382.html 一.自定义函数(UDF)的特性和功能  www.2cto.com 函数能分返回字符串,整数或实数; 可以定义一次作用于一行的简单函数,或作用于多行的组的集合函数; 二.基本操作 1.创建自定义函数 CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL} BEGIN //函数实现的语句 END; aggre

OpenStack 入门学习之二:在CentOS 6.5上使用RDO单机安装icehouse

本文主要介绍如何在CentOS6.5上通过RDO来安装icehouse,由于安装的过程中涉及的软件较多,以及依赖关系比较复杂,建议使用一个全新的操作系统来进行安装. 安装步骤具体如下 (1)安装操作系统 使用光盘或镜像文件安装操作系统. 分区的时候需要划分一个逻辑区,并且建立一个名称叫cinder-volumes的组.这个逻辑卷组会被cinder使用. 创建的效果类似于: 创建过程请参考:http://www.centos.org/docs/5/html/Deployment_Guide-en-

【数据库】9.0 MySQL入门学习(九)——获得数据库和表的信息、日期计算、查询

1.0 SELECT语句用来从数据表中检索信息. SELECT what_to_select FROM which_table WHERE conditions_to_satisfy; what_to_select指出你想要看到的内容,可以是列的一个表,或*表示"所有的列". which_table指出你想要从其检索数据的表. WHERE子句是可选项,如果选择该项,conditions_to_satisfy指定行必须满足的检索条件. 2.0 在我的博文"MySQL入门学习(八

MyBatis入门学习(二)

在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了解.环境测试是上一节中的测试环境.在此感谢博主提供的资料. 一.通过MyBatis持久层框架完成对数据库表的增删改查操作——基于XML的实现 1.定义sql文件的映射文件,userMapper文件内容如下: <?xml version="1.0" encoding="UTF

Elasticsearch入门学习(二):简单的入门学习

一.ES一些概念 索引 _inde,文档存储的地方,类似于关系型数据中的数据库. 事实上,数据被存储和索引在分片中,索引仅仅是一个把一个或者多个分片分组在一起的逻辑空间. 索引名字必须是全部小写,不允许以下划线开头,不能包含逗号. 文档 文档id是一个字符串,与_index组合时,就可以在ElasticSearch中唯一标识一个文档.创建文档时,可以自定义_id,也可以让ES帮助自动生成. 二.使用postman入门学习 创建索引 创建索引库的格式为:使用put请求:ip:9200/{index

【转】MYSQL入门学习之十二:存储过程的基本操作

转载地址:http://www.2cto.com/database/201212/177380.html 存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合.可将其视为批文件,虽然它们的作用不仅限于批处理.  www.2cto.com 使用存储过程需要MySQL5及以后的版本支持. 一.为什么要使用存储过程 通过把处理封闭在容易使用的单元中,简化复杂的操作: 将一系列处理步骤放到同一存储过程中,保证了数据的完整性和操作的安全性: 简化对变更的管理: 提高性能.使用存储过程比

mysql数据库学习(二)--表操作

一.表操作 以下内容都是自己学习的时候看过的一些知识,作为笔记记录一下吧,大部分都是所看文章的内容. 1.创建表 前面的基础篇笔记是相当于搭建了一个方便管理的文件夹树根,下面要学习的是一些关于表的知识,相当于树上的叶子吧! create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGINE=InnoDB DEFAULT CHARSET=utf8: 下面这两个变量是: ENGINE :存储引擎 charset:字符集 是否可空,null表示空,非字符串 not