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

目录
  • 通配符过滤
    • 通配符 %
    • 通配符 _
    • 技巧
  • 正则表达式过滤
    • 字符匹配
    • 其他字符
  • 对比
  • 正则表达式测试
  • 总结

通配符过滤

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

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

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

语法(使用LIKE操作符):

SELECT [column_name]
FROM [table_name]
WHERE [column_name] LIKE '[string]';

通配符 %

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

注意

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

通配符 _

‘_’ 只匹配单个字符。

技巧

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

正则表达式过滤

语法(使用REGEXP操作符):

SELECT [column_name]
FROM [table_name]
WHERE [column_name] REGEXP '[string]';

字符匹配

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

正则表达式匹配不区分大小写,使用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)

定位元字符

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

举例:

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

对比

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

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

正则表达式测试

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

总结

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

(0)

相关推荐

  • mysql正则表达式 LIKE 通配符

    扩展正则表达式的一些字符是: "."匹配任何单个的字符. 一个字符类"[...]"匹配在方括号内的任何字符.例如,"[abc]"匹配"a"."b"或"c".为了命名字符的一个范围,使用一个"-"."[a-z]"匹配任何小写字母,而"[0-9]"匹配任何数字. " * "匹配零个或多个在它前面的东西.例如,&q

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

    目录 通配符过滤 通配符 % 通配符 _ 技巧 正则表达式过滤 字符匹配 其他字符 对比 正则表达式测试 总结 通配符过滤 通配符:用来匹配值的一部分特殊字符. 通配符可以在搜索模式中任意位置使用,并且可以使用多个通配符. 搜索模式:由字面值.通配符或者两者组合构成的搜索条件. 语法(使用LIKE操作符): SELECT [column_name] FROM [table_name] WHERE [column_name] LIKE '[string]'; 通配符 % ‘%’ 表示任何字符出现任

  • Mysql如何通过binlog日志恢复数据详解

    目录 前言 方法如下 总结 前言 MySQL的binlog日志是MySQL日志中非常重要的一种日志,记录了数据库所有的DML操作.通过binlog日志我们可以进行数据库的读写分离.数据增量备份以及服务器宕机时的数据恢复. 定期备份固然可以在服务器发生宕机的时候快速的恢复数据,但传统的全量备份不可能做到实时,所以在发生宕机的时候,也会损伤一部分数据,如果这个时候开启了binlog日志,那么可以通过binlog来对没有做备份的这一阶段损失的数据进行恢复 Binlog日志,即binary log,是二

  • MySQL数据库使用mysqldump导出数据详解

    mysqldump是mysql用于转存储数据库的客户端程序.它主要产生一系列的SQL语句,可以封装到文件,该文件包含有所有重建您的数据库所需要的 SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等.可以用来实现轻量级的快速迁移或恢复数据库.是mysql数据库实现逻辑备份的一种方式. 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具:它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有

  • Mysql的SELECT语句与显示表结构详解

    SELECT... SELECT 1+1, 2+2;# 直接这样写相当于下面这句 SELECT 1+1, 2+2 FROM DUAL; # 这里DUAL:伪表 SELECT ... FROM 语法: SELECT 标识选择哪些字段(列)FROM 标识从哪个表中选择 例如选择全部列: SELECT * FROM departments; 一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符‘*’.使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的列数据通常会降低查询和所使用的应用

  • Mysql优化order by语句的方法详解

    本篇文章我们将了解ORDER BY语句的优化,在此之前,你需要对索引有基本的了解,不了解的老少爷们可以先看一下我之前写过的索引相关文章.现在让我们开始吧. MySQL中的两种排序方式 1.通过有序索引顺序扫描直接返回有序数据 因为索引的结构是B+树,索引中的数据是按照一定顺序进行排列的,所以在排序查询中如果能利用索引,就能避免额外的排序操作.EXPLAIN分析查询时,Extra显示为Using index. 2.Filesort排序,对返回的数据进行排序 所有不是通过索引直接返回排序结果的操作都

  • mysql之group by和having用法详解

    GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. select子句中的列名必须为分组列或列函数,列函数对于group by子句定义的每个组返回一个结果. 某个员工信息表结构和数据如下: id name dept salary edlevel hiredate 1 张三 开发部 2000 3 2009-10-11 2 李四 开发部 2500 3 2009-10-01 3 王五 设计部 2600 5 2010-10-02 4 王六 设计部 2300 4

  • Jmeter中正则表达式提取器使用详解

    目录 在使用Jmeter过程中,会经常使用到正则表达式提取器提取器,虽然并不直接涉及到请求的测试,但是对于数据的传递起着很大的作用,本篇博文就是主要讲解关于正则表达式及其在Jmeter的Sampler中的调用. 一.首先来介绍一下Jmeter中正则表达式提取器的元素组成,下图所示: 下面是各参数值的含义: 参数 释义 引用名称 在HTTP等请求中,引用此数据,需要用到的名称 正则表达式 用于将需要的数据提取出来 模板 表示使用提取到的第几个值: $1$:表示取第1个 $2$:表示取第二个 以此类

  • MySQL 清除表空间碎片的实例详解

    MySQL 清除表空间碎片的实例详解 碎片产生的原因 (1)表的存储会出现碎片化,每当删除了一行内容,该段空间就会变为空白.被留空,而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大: (2)当执行插入操作时,MySQL会尝试使用空白空间,但如果某个空白空间一直没有被大小合适的数据占用,仍然无法将其彻底占用,就形成了碎片: (3)当MySQL对数据进行扫描时,它扫描的对象实际是列表的容量需求上限,也就是数据被写入的区域中处于峰值位置的部分: 例如: 一个表有1万行

  • C++利用MySQL API连接和操作数据库实例详解

    1.C++连接和操作MySQL的方式 系列文章: MySQL 设计和命令行模式下建立详解 C++利用MySQL API连接和操作数据库实例详解 在Windows平台,我们可以使用ADO.ODBC或者MySQL API进行连接和操作.ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的一个用于存取数据源的COM组件.它提供了程序语言和统一数据访问方式OLE DB的一个中间层,也就是Microsoft提出的应用程序接口(API)用以实现访问关系或非关

  • JSON 数据详解及实例代码分析

     JSON 数据详解 一.json值的类型 1.简单值: 可以表示字符串,数值,布尔值,null不支持undefined(json的数值表示: 2 ) 2.对象: 一组有序的键值对,每个键值对的值可以是简单值,也可以是复杂数据类型.(json的字符串:"hello world").json字符串与JavaScript字符串的区别,json必须用双引号. 3.数组:一组有序值的列表,数组的值可以是简单值,也可以是复杂数据类型. 不支持变量,函数,以及对象实例 二.json对象与javas

随机推荐