MySQL模式匹配

SQL模式匹配可以使用“_“来匹配任意单个字符,”%“可以用来匹配任意数量(包含0个字符)的字符。在MySQL中,SQL模式匹配的大小写默认是不敏感的,以下有一些例子,当你在使用SQL模式时,不要使用 = 或 <>,而是使用LIKE 或 NOT LIKE。

要找到以字符“b"开头的名字:

mysql> SELECT * FROM pet WHERE name LIKE 'b%';
+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

找到以“fy”结尾的名字:

mysql> SELECT * FROM pet WHERE name LIKE '%fy';
+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
+--------+--------+---------+------+------------+-------+

找到名字包含字符“w”的名字:

mysql> SELECT * FROM pet WHERE name LIKE '%w%';
+----------+-------+---------+------+------------+------------+
| name     | owner | species | sex  | birth      | death      |
+----------+-------+---------+------+------------+------------+
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
+----------+-------+---------+------+------------+------------+

使用5个“_“模式字符,来找到包含5个字符的名字:

mysql> SELECT * FROM pet WHERE name LIKE '_____';
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

MySQL提供的其他模式匹配类型是使用扩展的正则表达式,当你使用这个类型来测试一个匹配,要使用REGEXP和NOT REGEXP操作(或者RLIKE和NOT RLIKE,他们是同意詞)。

下面的列表描述了一些扩展正则表达式的特征:

“.” 匹配任意单个字符.

一个字符类“[…]“匹配括号里的任意字符,例如,”[abc]“匹配“a”,“b”,或"c",要指定字符范围,可以使用“-",例如,“[a-z]"匹配任意字母,而“[0-9]"匹配任意数字。

"匹配0个或多个在它前面的东西。例如,“x“匹配任意个x字符,"[0-9]"匹配任意个数字,“."匹配任意个字符。

一个REGEXP模式匹配成功的条件是,模式在测试值中的任意地方匹配即可。(这与LIKE模式匹配不同,LIKE模式匹配成功需要匹配整个值)。

想让模式匹配测试值的开头或结尾,可以使用“^"开头作为模式的开头或用“$"作为模式的结尾。

为了验证扩展的正则表达式是如何工作的,在这使用REGEXP对前面使用LIKE查询进行重写。

使用“^“来匹配,找到以“b“开头的名字

mysql> SELECT * FROM pet WHERE name REGEXP '^b';
+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

如果你真的想强制REGEXP比较为大小写敏感,可以使用BINARY关键詞来把字符串转换成二进制字符串。 以下这个查询只匹配以小写字母“b“开头的名字:

mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';

要找到以"fy"结尾的名字,使用“$“来匹配名字的结尾:

mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';
+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
+--------+--------+---------+------+------------+-------+

要找到名字包含一个"w"的名字,使用这个查询:

mysql> SELECT * FROM pet WHERE name REGEXP 'w';
+----------+-------+---------+------+------------+------------+
| name     | owner | species | sex  | birth      | death      |
+----------+-------+---------+------+------------+------------+
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
+----------+-------+---------+------+------------+------------+

因为一个正则表达式的模式的匹配,是不管发生在值的哪个位置,在前面查询中,它不需要像使用一个SQL模式,放一个通配符在模式的两端,然后来匹配整个值。

要找到只包含5个字符的名字,使用“^"和“$"来匹配名字的开头和结尾,且放5个“."在中间。如下所示:

mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

你也可以使用{n}(重复n次)操作符来写前面的查询:

mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

MySQL模式匹配与正则表达式相关推荐

  1. mysql正则表达式配置,MySQL REGEXP:正则表达式

    正则表达式主要用来查询和替换符合某个模式(规则)的文本内容.例如,从一个文件中提取电话号码,查找一篇文章中重复的单词.替换文章中的敏感语汇等,这些地方都可以使用正则表达式.正则表达式强大且灵活,常用于 ...

  2. MYSQL模式匹配:REGEXP和like用法

    like要求整个数据都要匹配,而REGEXP只需要部分匹配即可. . 也就是说,用Like,必须这个字段的所有内容满足条件,而REGEXP只需要有任何一个片段满足即可. MySQL提供标准的SQL模式 ...

  3. 【详解】MySQL中使用正则表达式

    [详解]MySQL中使用正则表达式 前言 使用介绍 1.基础匹配 2.二选一(OR)匹配 3.特定一组字符的匹配 4.范围匹配 5.特殊字符匹配 6.字符类匹配 7.多个实例结果匹配 8.使用定位符匹 ...

  4. 正则匹配查询_如何用MySQL中的正则表达式过滤掉配送单

    需求 最近在用mysql做一个配送单的筛选的需求,比如一个订单表里的订单号有多种,比如以A,B,C,D,F开头的订单,我要同时过滤掉A,B与C的订单,那我要如何做呢?这里你们有其他方法的话,不妨留言哈 ...

  5. mysql中加入正则表达式,mysql中的正则表达式搜索

    mysql中的正则表达式搜索 语法: select * from table_name where column_name regexp '正则表达式' 或区分大小写 select * from ta ...

  6. 爬虫mysql数据清洗_正则表达式在Python爬虫、JavaScript、MySQL数据库、数据清洗建模等方面的使用实例...

    注:本文仅列举的实例,基础知识网上一搜一大把,这里不赘述了. 1. Python爬虫中的使用 这里面使用比较简单,作为入门用的,比如爬取首页的侧边栏的链接与对应名字: import re Import ...

  7. Python|SQL详解之DDL|DML|DQL|DCL|索引|视图、函数和过程|JSON类型|窗口函数|接入MySQL|清屏|正则表达式|executemany|语言基础50课:学习(14)

    文章目录 系列目录 原项目地址 第41课:SQL详解之DDL 建库建表 删除表和修改表 第42课:SQL详解之DML insert操作 delete 操作 update 操作 完整的数据 第43课:S ...

  8. MySQL 中匹配正则表达式

    MySQL 中匹配正则表达式需要使用关键字 REGEXP,在 REGEXP 关键字后面跟上正则表达式的规则即可.因此,当需要使用正则表达式查询数据时,只需要在 WHERE 条件中使用 REGEXP 关 ...

  9. MySQL REGEXP:正则表达式查询

    MySQL中正式表达式通常被用来检索或替换符合某个模式的文本内容,根据指定的匹配模式匹配文中符合要求的特殊字符串. 例如,从一个文件中提取电话号码,查找一篇文章中重复的单词或替换用户输入的敏感语汇等, ...

  10. mysql模式匹配用什么关键字_MYSQL模式匹配:REGEXP和like用法

    like要求整个数据都要匹配,而REGEXP只需要部分匹配即可. . 也就是说,用Like,必须这个字段的所有内容满足条件,而REGEXP只需要有任何一个片段满足即可. MySQL提供标准的SQL模式 ...

最新文章

  1. SpringBoot自定义异常源码分析
  2. Spring 中获取servletContext及WebApplicationContext以及applicationContext三者之间的关系
  3. GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决
  4. sql 对groupby 后的数据limit_SQL(三)——汇总分析
  5. MFC无边框对话框实现拖动
  6. 又反转了!IEEE发布最新声明:解除对华为系成员的限制
  7. 基于JAVA+SpringBoot+Vue+Mybatis+MYSQL的社区疫情防控管理系统
  8. IntelliJ Idea学习笔记008---Idea左侧栏不显示目录结构_或者只显示一个Project不显示其他东西
  9. 在银行里存两千万,光吃利息够花吗?
  10. 基于sklearn进行文本向量化
  11. 复习HTTP状态码+301和302
  12. ubuntu局域网服务器搭建网站,ubuntu搭建局域网dns服务器
  13. 如何查看一篇论文是否被SCI检索
  14. Quartz是什么?
  15. 攻防世界mfw_攻防世界-Web-mfw
  16. 一文彻底学会Redis主从复制(高可用)
  17. VS 错误: cout 不明确
  18. Java根据IP地址/掩码位(CIDR)和起始IP-终止IP计算网段(IPV4和IPV6)
  19. Linux 的父进程和子进程的执行情况(附有案例代码)
  20. 【USACO题库】1.5.4 Checker Challenge跳棋的挑战

热门文章

  1. 一个小公司老板日常管理的21个方面
  2. PintOS Lab1
  3. 惨!被恶意侵权投诉,Listing遭下架怎么办?
  4. CNN经典算法AlexNet介绍(论文详细解读)
  5. 华为HCIA进阶笔记:SR 基本原理
  6. 如何利用百度旗下的产品做网站推广优化。
  7. Redis实现主从复制(MasterSlave)
  8. 杭电1827--Summer Holiday(SCC + 缩点)
  9. EtherCAT ESI文件中Imagedata16X14图像的编辑
  10. [Reverse]首届“天权信安catf1ag”网络安全联合公开赛checkin