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

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

服务器之家 - 数据库 - Mysql - MySQL通配符与正则表达式搜过滤数据详解

MySQL通配符与正则表达式搜过滤数据详解

2022-11-23 14:23随处可见的打字员 Mysql

简单来说,正则表达式就是用来匹配文本的特殊字符串,下面这篇文章主要给大家介绍了关于MySQL通配符与正则表达式搜过滤数据的相关资料,文中通过实例代码以及图文介绍的非常详细,需要的朋友可以参考下

通配符过滤

通配符:用来匹配值的一部分特殊字符。

通配符可以在搜索模式中任意位置使用,并且可以使用多个通配符。

搜索模式:由字面值、通配符或者两者组合构成的搜索条件。

语法(使用LIKE操作符):

?
1
2
3
SELECT [column_name]
FROM [table_name]
WHERE [column_name] LIKE '[string]';

通配符 %

‘%’ 表示任何字符出现任意次数,例如 LIKE ‘jet%’ 匹配词jet起头的值,‘%anvil%’ 匹配任何位置包含文本anvil的值。

注意

  • 根据MySQL的配置方式,搜索可以是区分大小写的;
  • ‘%’ 可以匹配0个字符;
  • 值的尾空格会干扰通配符匹配,最好在搜索模式最后附加一个%;
  • ‘%’ 不能匹配NULL。

通配符 _

‘_’ 只匹配单个字符。

技巧

  • 不要过度使用通配符,因为这会很花时间;
  • 如有必要,使用通配符匹配在搜索的最后;

正则表达式过滤

语法(使用REGEXP操作符):

?
1
2
3
SELECT [column_name]
FROM [table_name]
WHERE [column_name] REGEXP '[string]';

字符匹配

基本匹配:‘.’ 表示匹配任意一个字符。

MySQL通配符与正则表达式搜过滤数据详解

正则表达式匹配不区分大小写,使用BINARY关键字区分,例如WHERE prod_name REGEXP BINARY ‘JetPack .000’。

  • OR匹配:‘1000|2000’ 表示匹配1000或者2000。
  • 多字符匹配:‘[123]’ 表示匹配 1 或 2 或 3,是 [1|2|3] 的缩写。

但是 ‘[1|2|3] Ton’ 和 ‘1|2|3 Ton’ 匹配结果并不相同,后者表示匹配 1 或 2 或 3 Ton。

  • 否定字符匹配:‘[^123]’ 表示匹配除这些字符外的任何东西。
  • 匹配范围:‘[0-9]’ 与 ‘[0123456789]’ 相同。‘[a-z]’ 匹配任意字母字符。
  • 匹配特殊字符:使用转义字符 ‘\’,例如 ‘\.’ 、’ \|’ 、‘\[’ 、‘\’。

其他字符

空白元字符

元字符 说明
\\f 换页
\\n 换行
\\r 回车
\\t 制表
\\v 纵向制表

字符类

说明
[:alnum:] 任意字母和数字
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表
[:cntrl:] ASCII控制字符(0-31和127)
[:digit:] 任意数字
[:graph:] 与[:print:]相同,但是不包括空格
[:lower:] 任意小写字母
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]也不在[:cntrl:] 中的任意字符
[:space:] 包括空格在内的任意空白字符
[:upper:] 任意大写字符
[:xdigit:] 任意十六进制数字

重复元字符

元字符 说明
* 0个或多个匹配
+ 1个或多个匹配
? 0个或多个匹配
{n} 指定数目匹配
{n, } 不少于指定数目的匹配
{n, m} 匹配数目的范围(m不超过255)

定位元字符

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

举例:

?
1
2
3
SELECT prod_name
FROM products
WHERE prod_name REGEXP '^[0-9\\.]';

MySQL通配符与正则表达式搜过滤数据详解

对比

如果匹配文本在列值中出现,则LIKE不会匹配,但是REGEXP会匹配。

MySQL通配符与正则表达式搜过滤数据详解

可以通过用 ^ 开始每个表达式,用 $ 结束每个表达式,使得REGEXP的作用和LIKE一样。

正则表达式测试

?
1
SELECT 'hello' REGEXP '[0-9]';  //结果返回0

总结

到此这篇关于MySQL通配符与正则表达式搜过滤数据的文章就介绍到这了,更多相关MySQL通配符与正则过滤数据内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_40948559/article/details/123999341

延伸 · 阅读

精彩推荐
  • Mysqlmysql ERROR 1045 (28000)问题的解决方法

    mysql ERROR 1045 (28000)问题的解决方法

    这篇文章主要介绍了mysql ERROR 1045 (28000)问题的解决方法,文中步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    weixin_416886195262020-12-10
  • MysqlMYSQL每隔10分钟进行分组统计的实现方法

    MYSQL每隔10分钟进行分组统计的实现方法

    这篇文章主要给大家介绍了如何利用MYSQL实现每隔10分钟进行分组统计的方法,文中给出了详细的示例代码,相信对大家的理解和学习具有一定的参考借鉴价...

    daisy5312020-07-05
  • MysqlMysql表的操作方法详细介绍

    Mysql表的操作方法详细介绍

    这篇文章主要为大家详细介绍了MySQL数据库中表常用的一些操作方法,文中的示例代码讲解详细, 对我们学习MySQL有一定帮助,需要的可以参考一下...

    _End丶断弦7552022-11-09
  • MysqlMySql表、字段、库的字符集修改及查看方法

    MySql表、字段、库的字符集修改及查看方法

    这篇文章主要介绍了MySql表、字段、库的字符集修改及查看方法,本文分别给们它的修改及查看语句,需要的朋友可以参考下 ...

    MYSQL教程网2562020-05-13
  • Mysqlmysql提示[Warning] Invalid (old?) table or database name问题的解决方法

    mysql提示[Warning] Invalid (old?) table or database name问题的解决方法

    今天一个朋友的上服务器出现[Warning] Invalid (old?) table or database name问题,通过分析binlog日志发现,在以下sql语句中出现问题,由于涉及敏感内容,用sql语法...

    king_wangheng8462019-12-06
  • Mysql简单分析MySQL中的primary key功能

    简单分析MySQL中的primary key功能

    这篇文章主要介绍了MySQL中的primary key功能,包括讲到了其对InnoDB使用的影响,需要的朋友可以参考下 ...

    罗龙九4192020-05-06
  • MysqlMySQL优化之如何了解SQL的执行频率

    MySQL优化之如何了解SQL的执行频率

    MySQL 客户端连接成功后,通过 show [session|global]status 命令 可以提供服务器状态信息,也可以在操作系统上使用 mysqladmin extended-status 命令获得这些消息 ...

    MYSQL教程网5502020-03-28
  • MysqlMySQL连接查询你真的学会了吗?

    MySQL连接查询你真的学会了吗?

    日常使用数据库查询语句时,单表查询尝尝不能满足项目的业务需求,在项目开发过程中,有很多需求都是要涉及到多表的连接查询,这篇文章主要给大家介绍了...

    代码魂5652021-08-09