Mysql中Regexp常见⽤法
Mysql中Regexp常见⽤法
模糊匹配,包含特定字符串
# 查content字段中包含“车友俱乐部”的记录
select * from club_content where content regexp '车友俱乐部'
# 此时的regexp与like的以下⽤法是等同的
select * from club_content where content like '%车友俱乐部%'
模糊匹配,以特定字符串开头
# 查content字段中以“车友”开头的记录
select * from club_content where content regexp '^车友'
# 此时的regexp与like的以下⽤法是等同的
select * from club_content where content like '车友%'
模糊匹配,以特定字符串结尾
# 查content字段中以“车友”结尾的记录
select * from club_content where content regexp '车友$'
# 此时的regexp与like的以下⽤法是等同的
select * from club_content where content like '%车友'
模糊匹配,或关系
# 查content字段中包含“⼼得”、“分享”或“技术贴”
select * from club_content where content REGEXP '⼼得|分享|技术贴'
模糊匹配,不包含单个字符
# 查content字段中不包含“车”字、“友”字的记录
select * from club_content where content REGEXP [^车友]
这个结果跑出来⼀看⼤吃⼀惊,竟然把所有记录给跑出来,这是为什么呢?
因为⼀旦加了这个⽅括号"[]",它就把⾥⾯的内容拆成单个的字符再匹配,它会逐个字符去匹配判断是不是等于“车”,或者是不是等于“友“,返回的结果是⼀组0、1的逻辑值。
如果想匹配不包含特定字符串,该怎么实现呢?
模糊匹配,不包含特定字符串
# 查content字段不包含“车友”字符串的记录
select * from club_content where content not REGEXP '车友'
MySql REGEXP运算符匹配字符串
1 ^ 匹配以该字符后⾯的字符开头的字符串
举个例⼦: REGEXP ‘^x' 表⽰匹配以x开头的字符
2 $匹配以该字符前⾯的字符结尾的字符串
举个例⼦: REGEXP ‘y$' 表⽰匹配以y结尾的字符
3 .匹配任意⼀个字符
4 […]匹配在⽅括号中的任意⼀个字符。
如: [1-9] 匹配1到9的数字, [abc]匹配其中任意⼀个
5 *匹配零个或多个在它前⾯的字符
如: x* 匹配任何数量的x字符
mysql 如何判断 "字符串" 是否为 "数字"
这个问题有点怪 ,但很多时候我们会以字符串的形式存储数字 , 反过来我们⽤字符串进⾏数学运算时, 好像也不会出错 . 除⾮ , ⽤作数学运算的字符串不能转换成数字 .
mysql操作官方文档但是我们改如何判断字符串是否能转换成数字呢 ?
采⽤mysql的 REGEXP运算符 . 怎么⽤?
{String} REGEXP '[^0-9.]'
前⾯的字符串是我们要做判断的,后⾯的字符串是mysql的正则表达式,意思是匹配不是数字或者⼩数点的字符。
如果String中含有不是0-9之间的数字或者是⼩数点时,返回true ,反之则返回false。
⽐如说:
select ('123a' REGEXP '[^0-9.]'); --‘123a'中含有字符'a' 输出结果为1 mysql中常量true输出为1 false输出为0
注意:如果字符串中有空格,也会匹配到正则表达式,返回1。如果是要去掉两端的空格,就要将判断的字符串,就要对字符串使⽤ trim()函数了。
这个只是REGEXP操作符的简单应⽤,REGEXP的详细应⽤请参考官⽅⽂档。
MySQL 正则表达式
在前⾯的章节我们已经了解到MySQL可以通过 LIKE ...% 来进⾏模糊匹配。
MySQL 同样也⽀持其他正则表达式的匹配, MySQL中使⽤ REGEXP 操作符来进⾏正则表达式匹配。
如果您了解PHP或Perl,那么操作起来就⾮常简单,因为MySQL的正则表达式匹配与这些脚本的类似。
下表中的正则模式可应⽤于 REGEXP 操作符中。
实例
了解以上的正则需求后,我们就可以根据⾃⼰的需求来编写带有正则表达式的SQL语句。以下我们将列出⼏个⼩实例(表名:person_tbl )来加深我们的理解:
查name字段中以'st'为开头的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
查name字段中以'ok'为结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
查name字段中包含'mar'字符串的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
查name字段中以元⾳字符开头或以'ok'字符串结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论