Mysql常用sql语句(21)- regexp 正则表达式查询
{n,m} 匹配前面的字符串至少 n 次, 至多 m 次 'b{2,4}' 匹配最少 2 个,最多 4 个 b bbb、bbbb
?
先看看product表有什么数据
product表
这里没有截全哈,因为数据比较多
?
栗子一:^
select * from product where product_name regexp ^2018';
?
栗子二:$
潮$';
?
先看看emp表有什么数据
emp表
后面再解释下为啥又换表了
?
栗子三: *、+
po*:查询 name 字段包含字母?p?,且?p?后面出现字母?o?的记录,而?*?可以表示0个字符,代表不出现
from emp where name regexp po*';
?
po+:查询 name 字段包含字母?p?,且?p?后面出现字母?o?的记录,但?+?表示至少出现1个字符
po+';
?
栗子四:[]
下面两种写法是一样的,用?,?隔开每个字符,可能可读性更高
[p,s]'; [ps]';
?
栗子五:[^]
注意:这里的^是取反,不是开头的意思哦!不要混淆
查询 id >=10 且 开头非字母 p 的记录
where id >=10 and name regexp ^[^p]';
?
为啥中途换表
因为,我发现正则表达式并不是对所有中文都生效,举个下面的栗子
[小]';
可以看到,name 字段需要匹配到一个【小】才应该被返回,但是除了红框以外的数据都被返回了,有问题有问题....
那为什么会这样呢?
- 原来,是因为 regexp 不支持多字节匹配,说白了,就是不支持中文编码
- 要想查询中文,最好通过 like 关键字进行模糊匹配啦
当然啦,也不是没有解决办法
只需要用小括号()把中文括起来就行了
^(小)';
?
但,这种写法在?[ ]?里面还是不起作用
[(小)]';
?
所以啊,还是推荐用 like 模糊匹配中文字符吧!而且日常工作中也完全够用啦!
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html ? 前言正则的强大不言而喻,Mysql中也提供了 regexp 关键字来进行正则查询 ? 正则查询的语法格式<列名> regexp '正则表达式' ? 常用的正则表达式 | |||
选项 | 说明 | 例子 | 匹配值示例 |
---|