学习笔记,以代码和例子堆砌而成,方便查阅。
参考书籍:《Mysql必知必会》等
要点:REGEXP关键字、BINARY关键字、转义、字符类、正则测试

因为正则表达式笔者专门写了一系列Blog,所以这里对正则表达式的用法,不做过多阐述,主要看正则在Mysql中的应用。


此Blog里的例子都会用下面store数据表:

# id, product, price, grade, pro_date, note
'1', 'Snob201', '2300.23', 'B', 1998, 'Snob 2000 expand'
'2', 'Snob301', '1289.21', 'C', 1996, 'Snob 3000 expand'
'3', 'Snob401', '4876.34', 'A', 2002, '2.0 Snob 3000 expand'
'4', 'GibeX01', '3232.76', 'A', 2000, 'X serise 1'
'5', 'GibeX02', '1200.00', 'D', 2000, 'X serise 2'
'6', 'GibeU200', '5010.12', 'B', 2005, '2.0 X serise 2'
'7', 'GibeU300', '3000.78', 'A', 2010, '2.1 X serise 2'
'8', 'SnobR001', '6321.54', 'B', 2010, 'R (no.1)'
'9', 'SnobR002', '3245.54', 'A', 2011, 'R (no.2)'
'10', 'AdroitX001', '6543.90', 'B', 2014, 'Lose'
'11', 'AdroitX002', '1050.00', 'D', 2015, 'Lose'

注意!Mysql仅支持多数正则表达式实现的一个很小的子集。

  • 关键字LIKE与关键字REGEXP

首先,看下面这行sql语句:

SELECT * from store WHERE product REGEXP '200';

输出:

# id, product, price, grade, pro_date, note
'6', 'GibeU200', '5010.12', 'B', 2005, '2.0 X serise 2'

我们看到拿到了product='GibeU200’的记录。

现在我想理顺REGEXP和LIKE的区别。

我们把上面的sql语句中的REGEXP替换成LIKE:

SELECT * from store WHERE product LIKE '200';

输出:

# id, product, price, grade, pro_date, note

啥都没匹配到。

这是因为REGEXP将找出product中包含’200’的记录,而LIKE则要找的是product='200’的记录。如果LIKE想要匹配部分值(与REGEXP语句相同的效果),则需要使用通配符%或通配符_(%200%)。那么怎样使REGEXP匹配全部值(与LIKE有相同的效果)呢,这时就要用元字符^和元字符$(^200$)

  • 匹配大小写

首先,来一段代码:

SELECT * FROM store WHERE product REGEXP 'snob';

输出:

# id, product, price, grade, pro_date, note
'1', 'Snob201', '2300.23', 'B', 1998, 'Snob 2000 expand'
'2', 'Snob301', '1289.21', 'C', 1996, 'Snob 3000 expand'
'3', 'Snob401', '4876.34', 'A', 2002, '2.0 Snob 3000 expand'
'8', 'SnobR001', '6321.54', 'B', 2010, 'R (no.1)'
'9', 'SnobR002', '3245.54', 'A', 2011, 'R (no.2)'

可以看到,匹配到了5条记录,但是这里我们用小写的’snob’就匹配到了大写的’Snob’,我不想这样,我想大写匹配大写,小写匹配小写,这里可以使用BINARY关键字来实现:

SELECT * FROM store WHERE product REGEXP BINARY 'snob';

输出:

# id, product, price, grade, pro_date, note

嗯!不错,这样小写的’snob’就啥也匹配不到了。

  • 转义

如果我想匹配.可咋整,我们知道.是正则表达式中的元字符,所以我们需要对其进行转义,方法就是在.之前加\\。来个例子先:

SELECT * FROM store WHERE note REGEXP '2\\.0';

输出:

# id, product, price, grade, pro_date, note
'3', 'Snob401', '4876.34', 'A', 2002, '2.0 Snob 3000 expand'
'6', 'GibeU200', '5010.12', 'B', 2005, '2.0 X serise 2'

多数正则表达式用\单斜杠就能实现转义的功能,那为啥mysql要用\\双斜杠呢?这里和python用\\双斜杠进行转义的原因差不多,详见:正则表达式的转义。

  • 匹配字符类

因为笔者实在懒得打字了,就放图片吧:

来个字符类的例子:

SELECT * FROM store WHERE note REGEXP '[[:digit:]]{4}';

输出:

# id, product, price, grade, pro_date, note
'1', 'Snob201', '2300.23', 'B', 1998, 'Snob 2000 expand'
'2', 'Snob301', '1289.21', 'C', 1996, 'Snob 3000 expand'
'3', 'Snob401', '4876.34', 'A', 2002, '2.0 Snob 3000 expand'

再来个字符类例子,加深一下印象呗:

SELECT * FROM store WHERE note REGEXP '^[[:digit:]]\\.[0-9]';

输出:

# id, product, price, grade, pro_date, note
'3', 'Snob401', '4876.34', 'A', 2002, '2.0 Snob 3000 expand'
'6', 'GibeU200', '5010.12', 'B', 2005, '2.0 X serise 2'
'7', 'GibeU300', '3000.78', 'A', 2010, '2.1 X serise 2'
  • 对正则表达式的简单测试

可以在不使用数据库的情况下,用SELECT来测试正则表达式,REGEXP检查将返回0(没有匹配)或1(匹配),来个例子:

SELECT '应用回归分析第4版' REGEXP '第[1-9]版';

输出:

'1'

初识Mysql(part7)--我需要知道的5个关于正则的小知识相关推荐

  1. 初识Mysql(part18)--我需要知道的4个关于联结的小知识点

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:表别名,自链接,外连接,聚合函数与联结 此Blog会用到下面2个表. temp_product表: # ...

  2. 初识Mysql(part19)--我需要知道的3条Mysql语句之组合查询

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:UNION.UNION ALL 此Blog会用到下面2个表. temp_product2: # id, ...

  3. 初识Mysql(part17)--我需要知道的3条Mysql语句之联结

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:联结.INNER JOIN.ON关键字 此Blog会用到下面3个表. temp_store表: # p ...

  4. 初识Mysql(part16)--我需要知道的2条Mysql语句之子查询

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 此Blog会用到下面3个表. temp_store表: # pr_id, store_num '1001', ...

  5. 初识Mysql(part15)--我需要知道的4条Mysql语句之操作表

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:ALTER关键字.RENAME关键字.DROP关键字.ADD关键字 此Blog里的例子都会用下面的te ...

  6. 初识Mysql(part14)--我需要知道的6个关于创建表的小知识

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:CREATE TABLE.主键.NULL.AUTO_INCREMENT.默认值.引擎 创建一个表 My ...

  7. 初识Mysql(part13)--我需要知道的7条Mysql语句之更新和删除数据

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:UPDATE关键字.IGNORE关键字.DELETE关键字.TRUNCATE TABLE语句 此Blo ...

  8. 初识Mysql(part12)--我需要知道的3条Mysql语句之插入数据

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:INSERT INTO子句 此Blog里的例子都会用下面的grouping表和grouping2表. ...

  9. 初识Mysql(part11)--我需要知道的4条Mysql语句之分组

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:GROUP BY子句.HAVING关键字 此Blog里的例子都会用下面grouping数据表: # i ...

最新文章

  1. 5个让IT开发效率提高200%的工具,最后一个很实用,你用过几个
  2. java线程池ThreadPoolExecutor使用简介
  3. 计算机系统大作业——hello的一生
  4. hilbert变换简介
  5. 如何用VNC远程管理Linux桌面
  6. Google SketchUp For Dummies
  7. 新手支付对接流程重点
  8. 在计算机上格式u盘启动,请问U盘制作成启动盘后插电脑上显示0字节,打不开也无法格式化,提示磁盘写有保护怎么回事?...
  9. springboot返回404错误页面
  10. (十六)Hibernate中的延迟加载
  11. 2014年互联网IT公司产品、技术类人员工资待遇汇总 2015部分补充
  12. 如何批量将多个 PPT 文档按指定页分别拆分成多个文档
  13. CToolBar的使用总结1
  14. 信息系统分析与设计 第十一章 系统详细设计
  15. 组建局域网共享上网全过程
  16. linux中PS1变量用法
  17. VB.NET 判断文本的换行符
  18. C++ 论公有继承时纯虚函数、虚函数、普通函数的行为表现及虚函数的重写(深度好文)
  19. opencv python书籍_OpenCV算法精解:基于Python与C++
  20. 国内外著名个人防火墙集锦

热门文章

  1. 正则表达式实现手机号中间4位数隐藏或者只显示末尾四位数
  2. App Store 扣费 知识产权 备忘
  3. 《数据结构》—— 串,KMP模式算法(转载)
  4. iOS中UIWebview中网页宽度自适应的问题
  5. Ant Design 使用小结
  6. Python之类的继承
  7. 8086PC读取和执行指令相关部件
  8. 产品开发过程问题及解决方案汇总
  9. 网络克隆报a:\ghosterr.txt故障解决一例
  10. PON的技术优势及前景应用