1. 通配符
    1.1. Like操作符
    mysql为了在搜索子句中使用通配符,必须使用like操作符
    mysql通配符有两种,一种是最常用多字符通配符“%”,另一种是单字符通配符“_”
    1.1.1. “%”通配符
    %表示任何字符出现的任意次数,%可以用在需要匹配字符的左边,表示检索以匹配字符结尾的项;放在匹配字符的右边表示检索以匹配字符开始的项;放在匹配字符的两表表示检索包含匹配字符的项

例如检索prod_name列中以o开头的记录

SELECT vend_id,prod_name,prod_price from products
WHERE prod_name LIKE 'o%'
ORDER BY prod_price


检索prod_name列中以o结束的记录

SELECT vend_id,prod_name,prod_price from products
WHERE prod_name LIKE '%o'
ORDER BY prod_price


检索prod_name列中包含o字符的记录

SELECT vend_id,prod_name,prod_price from products
WHERE prod_name LIKE '%o%'
ORDER BY prod_price


注意:通配符%不能用来匹配值为null的项

1.1.2. “_”配符

"_"通配符一次只能匹配单个字符,匹配多个字符需要多个通配符

"_“通配符和”%"一样,可以放在匹配项的左边、右边、两边

SELECT vend_id,prod_name,prod_price from products
WHERE prod_name LIKE '_ling'
ORDER BY prod_price


注意:不要过分使用通配符,如果能用其他操作符达到目的,应该使用其他操作符
在使用通配符时,不要把通配符放在陪陪想的左边,因为会导致全文检索,拖慢查询速度

  1. 正则表达式

MySQL中使用REGEXP关键字后跟匹配项进行检索
下面例子时检索prod_name 列中包含ton字符的记录

SELECT vend_id,prod_name,prod_price from products
WHERE prod_name REGEXP 'ton'
ORDER BY prod_price

2.1. OR匹配
mysql使用"|"链接两个匹配表达式,例如下列的例子,检索prod_name 列中包含ton或can字符的记录

SELECT vend_id,prod_name,prod_price from products
WHERE prod_name REGEXP 'ton|can'
ORDER BY prod_price

2.2. 匹配单一字符
[12]定义一组字符,匹配以1或2开始的包含" ton"的记录,[12]也可写成[1|2]

SELECT vend_id,prod_name,prod_price from products
WHERE prod_name REGEXP '[12] ton'
ORDER BY prod_price

2.3. 匹配范围

匹配范围和上述的匹配单字符类似,使用"[]"定义匹配集,在匹配集中表明匹配的范围,如 [1-9]x 表示匹配数字1-9开头的包含x的项。[1-9][a-z]表示匹配第一个字符以数字1-9开头,第二个字符以a-z字母开头的项。

2.4. 匹配特殊字符
mysql中匹配特殊字符时,需要使用"\“对特殊字符进行转义
例如 查找prod_name 列中 以”."开头的记录

SELECT vend_id,prod_name,prod_price from products
WHERE prod_name REGEXP '\\.'
ORDER BY prod_price


"\"也用来引用元字符

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

2.5.匹配字符类

可以使用MySQL预定义的字符集检索经常使用的数字、所有字母字符或所有的数字字母

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

例如
要检索连在一起的任意数字的记录

SELECT vend_id,prod_name,prod_price from products
WHERE prod_name REGEXP '[[:digit:]]{4}'
ORDER BY prod_price


2.6. 匹配多个实例

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

2.7 定位符

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

例如要检索prod_name列中以0-9数字(包含以小数点开始的数)的记录

SELECT vend_id,prod_name,prod_price from products
WHERE prod_name REGEXP '^[0-9\\.]'
ORDER BY prod_price

  1. like和通配符的区别
    like匹配整个列,如果被匹配的文本在列值中出现,like将不会找到它,相应的行也不会被返回(除非使用通配符),而REGEXP在列值内进行匹配,如果列值在匹配的文本中出现,REGEXP将会找到它,相应的行也会被返回

例如
使用like匹配返回的结果


使用REGEXP匹配返回的结果

以上内容参考《MySQL必知必会》

MySQL通配符与正则表达式的使用相关推荐

  1. mysql通配符和正则表达式

    通配符 用在like后的字符串里的符号,关键字是 like.表示要跟like后的字符串完全匹配才能匹配上.如果没有通配符,匹配字符串时,like就跟等于号是相同含义的. like和等于的区别就是lik ...

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

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

  3. mysql通配符_mysql通配符使用

    mysql通配符使用: w3cchool 在mysql查询中,经常会用到通配符,而且mysql的通配符和pgsql是有所不同的,甚至mysql中还可以使用正则表达式.本文就为大家带来mysql查询中通 ...

  4. mysql通配符大全

    MySQL 通配符 SQL的模式匹配允许你使用"_"匹配任何单个字符,而"%"匹配任意数目字符(包括零个字符).在 MySQL中,SQL的模式缺省是忽略大小写的 ...

  5. MySQL 通配符学习小结

    MySQL 通配符 SQL的模式匹配同意你使用"_"匹配不论什么单个字符,而"%"匹配随意数目字符(包含零个字符).在 MySQL中,SQL的模式缺省是忽略大写 ...

  6. linux通配符和正则表达式的区别总结

    目录 通配符和正则表达式的区别 Linux中的通配符 通配符和正则表达式的区别 在看鸟哥的Linux私房菜的时候看到十二章一直强调通配符和正则表达式的区别,在我的理解中,两者貌似是一样的都是用来匹配的 ...

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

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

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

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

  9. *在通配符及正则表达式中的差别

    *在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者多个字符,不能独立使用的.比如通配符可以用*来匹配任意字符,而正则表达式不行, ...

最新文章

  1. 金山网盾监测:游戏玩家下载西西游戏外挂会中大量***
  2. 计算机课怎样回归老师控制,职业学校计算机专业课堂回归真学习
  3. java中邮箱发送_java实现邮箱发送(java mail)
  4. 从Spring中的@Transactional注解说起
  5. python和java还有sql区别_人人都在学编程?Python,R,Java,SQL,你究竟需要学哪一种?...
  6. USB转串口 TTL RS-232 RS-485 COM口 UART区别
  7. Shell_NotifyIcon
  8. Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning(TKDE2020)
  9. Google Python命名规范
  10. 百宝云网络验证对接+脚本更新功能(源码)
  11. TE TM TEM模的区别
  12. iOS为什么获取不到设备的DeviceToken
  13. 【Linux命令行与Shell脚本编程】三,Linux文件系统
  14. Apache Kylin
  15. java 解析m3u8的实例_m3u8文件完整实例及TS流抓取
  16. 【学习总结】VIO初始化学习1:Monocular Visual–Inertial State Estimation With Online Initialization and Camera–IMU
  17. vim使用gf(go file)跳转文件
  18. 老人与海好词100英文带翻译_老人与海英文读后感100字
  19. Android VideoView没有画面
  20. 如何从100万个数中找出最大的前100个数

热门文章

  1. Java模拟自行车电动车属性调用
  2. qt 取textedit 鼠标位置处单词_开源国产优麒麟20.04 V3发布:多达73处改进
  3. c# 屏幕快照_c# – 使用Graphics.CopyFromScreen以150%缩放比例截取屏幕截图
  4. 移动手机版网页模板集合
  5. 阿里云ECS使用ossfs挂载OSS使用 【allow_other】
  6. 15款最好用的腾讯短链接url批量生成工具 - 值得收藏
  7. 美国杀人犯在上海当老师:让中国孩子远离洋垃圾
  8. Android之getSharedPreferences与getDefaultSharedPreferences的区别
  9. 20200717-UML类图箭头
  10. 简要模仿淘宝购物车功能