第一条的查询结果是name值等于’小白‘的数据,而第二条的查询结果是name中包含’小白’的数据,也可以用like(模糊查询+通配符)来实现regexp查询结果。
select column from table where column regexp 'X|Y' order by column;
select column from table where column regexp '[XY]test' order by column;
第一种写法会将|应用于整个串,只要字符串中有X或Y的数据,都将被检索出来
第二种写法只将[XY]应用于搜索模式的开头处
([])集合可以用来定义要匹配的一个或多个字符,比如[0123456789],为了简化这种类型的集合,可使用(-)来定义一个范围,即[0-9],[a-z]
匹配特殊字符
则表达式由具有特定含义的特殊字符构成;如果要匹配这些特殊字符,就需要用\为前导,这种处理方式就是所谓的转义(escaping),正则表达式内具有特殊意义的所有字符都必须以这种方式转义;(为了匹配反斜杠{}字符本身,需要使用\\)
注意:多数正则表达式实现使用单个反斜杠转义特殊字符,以便能够使用这些字符本身,而MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释一个)
匹配字符类
有时候需要检索出我们需要的数字、所有字母字符或所有数字字母字符等的匹配,我们可以使用预定义的字符集,称为字符类。
匹配多个实例
有时候需要对匹配的数目进行更强的控制,比如:寻找所有的数,不管数中包含多少数字,或寻找一个单词并尾随一个s(如果存在)等情况,我们可以利用正则表达式中的重复元字符来完成。
select column from table where column regexp '\\([0-9] sticks?\\)' order by column;
上面的正则表达式‘\([0-9] sticks?\)’意为:\匹配([0-9]匹配任意数字,这里指匹配的数值范围,sticks?匹配stick和sticks{?使s可选,因为?匹配它前面任何字符的0或者1次出现})。
有时候为了匹配特定位置的文本,需要使用定位符,常用定位符列表如下:
找出一个以一个数(包括小数点开始的数)开始的所有数值,简单搜索[0-9\.]或([[:digit:]\.])不行,因为它将在文本内任意位置查找匹配,可以使用^定位符,如下:
select column from table where column regexp '^[0-9\\.]' order by column;
^有两种用法
在集合中(用[和]定义),用它来否定该集合 用来指串的开始处
使regexp和like起相同作用:like匹配整串二regexp匹配子串,可以利用定位符,用^开始每个表达式,用$结束每个表达式,就可以使regexp和like作用一样。
查询admin表中的group字段,数据格式为:1,2,3;4,5,6;1,87,101
例如查询101:
select * from xin_admin where `group` REGEXP '[,|;]?101[,|;]?';
附:Mysql字符串截取 和 截取字符进行查询
一、MySQL中字符串的截取
MySQL中有专门的字符串截取函数:其中常用的有两种:substring_index(str,delim,count) 和concat
1.substring_index(str,delim,count) 函数的使用较为普遍。
函数括号里面的依次为:要分隔截取的字符串(如:”aaa_bbb_ccc”)、分隔符(如:“_”)、位置(表示第几个分隔符处,如:“1”)。
count为正数,那么就是从左边开始数,函数返回第count个分隔符的左侧的字符串; count为负数,那么就是从右边开始数,函数返回第count个分隔符右边的所有内容; count可以为0,返回为空。
例子:substring_index("aaa_bbb_ccc","_",1) ,返回为 aaa; substring_index("aaa_bbb_ccc","_",2) ,返回为 aaa_bbb; substring_index(substring_index("aaa_bbb_ccc","_",-2),"_",1) ,返回为 bbb;
2.concat是连接几个字符串
例子:concat(‘m’,’y’,’s’,’q’,’l’);
返回:mysql
二、依据表中的某个字段查询包含有这个字符的所有数据
1.find_in_set:SELECT * FROM user WHERE find_in_set(‘吴’,name);
查询user表中所有name包含“吴”的数据
2.REGEXP:SELECT * FROM user WHERE name REGEXP ‘(‘吴’|‘刘’)’;
使用正则,查询包含刘或者吴的数据
到此这篇关于MySQL中正则表达式(REGEXP)使用的文章就介绍到这了,更多相关MySQL正则表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
MySQL约束和表的复杂查询操作大全 2022-11-11
MySQL建表设置默认值/取值范围的操作代码 2022-11-11
MySQL如何为表和字段取别名详解 2022-11-11
MySQL事务隔离机制详解 2022-11-11
解读sql中timestamp和datetime之间的转换 2022-11-11
MySQL中order by排序语句的原理解析 2022-11-11
Mysql建库字符集和排序规则及说明 2022-11-11
MySQL8.0.28数据库安装和主从配置说明 2022-11-11
美国设下计谋,用娘炮文化重塑日本,已影响至中国 2021-11-19 时空伴随者是什么意思?时空伴随者介绍 2021-11-09 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终 2021-11-05 2022年放假安排出炉:五一连休5天 2022年所有节日一览表 2021-10-26
电脑版 - 返回首页
2006-2023 脚本之家 JB51.Net , All Rights Reserved. 苏ICP备14036222号