服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL使用正则表达式去检索指定数据库字段

MySQL使用正则表达式去检索指定数据库字段

2022-11-23 14:07阿柠xn Mysql

这篇文章主要介绍了MySQL使用正则表达式去检索指定数据库字段,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

使用MySQL正则表达式

基本字符匹配

例:检索列prod_name 包含文本1000的所有行。

SELECT prod_name 
FROM products 
WHERE prod_name REGEXP '1000'
ORDER BY prod_name;

MySQL使用正则表达式去检索指定数据库字段

REGEXP告诉MySQL,它后面跟着的是正则表达式。

SELECT prod_name 
FROM products 
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;

MySQL使用正则表达式去检索指定数据库字段

这个 . 可以说是正则表达式的一部分用途了。它表示匹配任一一个字符。

LIKE 和 REGEXP的区别:

  • LIKE是匹配整个列,完全一样或者带通配符才可以匹配成功
  • REGEXP是只要列中包含文本就可以匹配成功。当然REGEXP也可以匹配整个列值。

区分大小写:

  • 正则表达式的匹配是不区分大小写的。为区分大小写可使用BINARY关键字。
    • 如:WHERE prod_name REGEXP BINARY 'JetPack .000'

进行OR匹配

使用符号 |:

SELECT prod_name 
FROM products
WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;

MySQL使用正则表达式去检索指定数据库字段

匹配几个字符串之一

如果你只想匹配特定的字符,可以通过指定一组用 [ ] 括起来的字符完成。

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY  prod_name;

MySQL使用正则表达式去检索指定数据库字段

上面这个结果,还想说明一个问题,就是REGEXP虽然是可以匹配尾巴和头部的空格,但是你在单引号之间的空格还是需要你自己写上去的,单引号之间的空格你不写可是匹配不到结果的。

如上面结果所示,[]其实就是另一种方式的or语句,【123】其实也就是【1|2|3】。当然你写后者也是没有任何问题的。

下面我们再看一个例子:

SELECT prod_name
FROM products
WHERE prod_name REGEXP '1|2|3 Ton'
ORDER BY  prod_name;

MySQL使用正则表达式去检索指定数据库字段

从结果上我们不难看出,你不用【】括起来,MySQL就会理解为1or2or3 Ton这样的形式

而下面那三行能匹配到也就是因为里面有1or2。

字符集也可以被否定:[ ^123 ]的意思就是匹配除了这些以外的任何东西。

这个 ^ 在【】括号里,就是除了的1,2,3,的意思,但是如果没有【】,那就是定位符是文本的开始位置的意思。

你比如说下面这两结果就是一样的:

MySQL使用正则表达式去检索指定数据库字段

MySQL使用正则表达式去检索指定数据库字段

你再看一个理解定位符^

MySQL使用正则表达式去检索指定数据库字段

当时我有一个这样的例子不明白,后来想明白了。

MySQL使用正则表达式去检索指定数据库字段

上面这个当时我就不明白,为什么都不包含1了,红框里还有,这就是REGEXP,你不包含1or2or3.你有其他的元素呀,所以你就得显示出来。

匹配范围

集合可以用来定义要匹配的一个或者多个字符。

例如:下面的集合将匹配数字0到9

【0123456789】

为了简化这种类型的集合,可使用 - 来定义一个范围。

【0-9】

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[1-5] Ton'
ORDER BY prod_name;

MySQL使用正则表达式去检索指定数据库字段

匹配特殊字符

也就是转义。我们要匹配特殊字符必须用\为前导

SELECT vend_name
FROM vendors
WHERE vend_name REGEXP '\.'
ORDER BY vend_name;

MySQL使用正则表达式去检索指定数据库字段

多数的正则表达式实现使用单个反斜杠转义特殊字符,以便能使用这些字符本身。但是mysql要求两个反斜杠(mysql自己解释一个,正则表达式库解释一个)。

匹配字符类

存在找出你自己经常使用的数字,所有字母字符或所有数字字母字符等的匹配。为方便工作,可以使用预定义的字符集,称为字符类。

说明
【:alnum:】 任意字母和数字(同【a-zA-Z0-9】)
【:alpha:】 任意字符【a-zA-Z】
【:blank:】 空格和制表【\t】
[:cntrl:] ASCII控制字符(ASCII0到31和127)
【:digit:】 任意数字(【0-9】)
【:graph:】 与【:print:】相同,但不包括空格
【:lower:】 任意小写字母【a-z】
【:print:】 任意可打印字符
【:punct:】 既不在【:alnum:】也不在【:cntrl:】中的任意字符
【:space:】 包括空格在内的任意空白符(同【\f\n\r\t\v】)
[:upper:] 任意大写字母【A-Z】
【:xdigit:】 任意十六进制数字(同【a-fA-F0-9】)

匹配多个实例

重复元字符

元字符 说明
* 0个或者多个匹配
+ 1个或多个匹配(等于{1,})
0个或1个匹配(等于{0,1})
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围
SELECT prod_name
FROM products
WHERE prod_name REGEXP '\([0-9] sticks?\)'
ORDER BY prod_name;

MySQL使用正则表达式去检索指定数据库字段

我觉得难理解的点就在于,那个?的匹配(s后的?使s可选,因为?匹配他前面的的任何字符0次或者1次)。这也就是会有第一条结果的原因。

例:匹配连在一起的的4位数字。

SELECT prod_name
FROM products
WHERE prod_name REGEXP '[[:digit:]]{4}'
ORDER BY prod_name;

MySQL使用正则表达式去检索指定数据库字段

定位符

之前的例子都是匹配任一一个串中任意位置的文本。为了匹配特定位置的文本,我们需要使用定位符。

元字符 说明
^ 文本的开始
$ 文本的结束
[[:<:]] 词的开始
[[:>:]] 词的结束

例:找一个以数或小数点开始的所有产品

SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\.]'
ORDER BY prod_name;

MySQL使用正则表达式去检索指定数据库字段

到此这篇关于MySQL使用正则表达式去检索指定数据库字段的文章就介绍到这了,更多相关MySQL检索数据库字段内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7136217897612869640

延伸 · 阅读

精彩推荐
  • Mysqlmysql sql_mode="" 的作用说明

    mysql sql_mode="" 的作用说明

    在看discuz源码时看到了sql_mode="",不知道是干嘛的,猜想是设置模式,但是不清楚是什么模式,于是从网上搜了下,sql_mode="" 的作用 ...

    MYSQL教程网5162019-11-23
  • MysqlMySQL错误“Specified key was too long; max key length is 1000 bytes”的解决办法

    MySQL错误“Specified key was too long; max key length is 1000 bytes”的解决办

    今天在为数据库中的某两个字段设置unique索引的时候,出现了Specified key was too long; max key length is 1000 bytes错误 ...

    mysql教程网7172019-11-10
  • Mysqlmysql8.0.11数据目录迁移的实现

    mysql8.0.11数据目录迁移的实现

    这篇文章主要介绍了mysql8.0.11数据目录迁移的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    限量版灬小小6282021-04-14
  • MysqlMySQL建立唯一索引实现插入重复自动更新

    MySQL建立唯一索引实现插入重复自动更新

    这篇文章给大家分享的是当向数据插入数据时,判断字段是不是存在,存在执行更新操作,如果不存在就执行插入操作的方法,有需要的朋友们可以参考借...

    小谈博客3902020-06-23
  • MysqlMySQL找出未提交事务信息的方法分享

    MySQL找出未提交事务信息的方法分享

    这篇文章主要给大家介绍了关于MySQL如何找出未提交事务信息的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习...

    潇湘隐者3852020-09-29
  • Mysql关于MySQL的sql_mode合理设置详解

    关于MySQL的sql_mode合理设置详解

    这篇文章主要给大家介绍了关于MySQL的sql_mode合理设置的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,...

    小马哥8882472020-11-27
  • MysqlMySQL的安装以及基本的管理命令和设置

    MySQL的安装以及基本的管理命令和设置

    这篇文章主要介绍了MySQL的安装以及基本的管理命令和设置,是搭建MySQL环境的基础,需要的朋友可以参考下 ...

    MYSQL教程网4872020-05-21
  • MysqlMysqli基础知识

    Mysqli基础知识

    本文给大家讲述的是Mysqli的基础知识,非常的浅显易懂,有需要的小伙伴就可以参考下。 ...

    MYSQL教程网3642020-05-14