MySQL通配符与正则表达式的使用
- 通配符
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
注意:不要过分使用通配符,如果能用其他操作符达到目的,应该使用其他操作符
在使用通配符时,不要把通配符放在陪陪想的左边,因为会导致全文检索,拖慢查询速度
- 正则表达式
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
- like和通配符的区别
like匹配整个列,如果被匹配的文本在列值中出现,like将不会找到它,相应的行也不会被返回(除非使用通配符),而REGEXP在列值内进行匹配,如果列值在匹配的文本中出现,REGEXP将会找到它,相应的行也会被返回
例如
使用like匹配返回的结果
使用REGEXP匹配返回的结果
以上内容参考《MySQL必知必会》
MySQL通配符与正则表达式的使用相关推荐
- mysql通配符和正则表达式
通配符 用在like后的字符串里的符号,关键字是 like.表示要跟like后的字符串完全匹配才能匹配上.如果没有通配符,匹配字符串时,like就跟等于号是相同含义的. like和等于的区别就是lik ...
- Python|SQL详解之DDL|DML|DQL|DCL|索引|视图、函数和过程|JSON类型|窗口函数|接入MySQL|清屏|正则表达式|executemany|语言基础50课:学习(14)
文章目录 系列目录 原项目地址 第41课:SQL详解之DDL 建库建表 删除表和修改表 第42课:SQL详解之DML insert操作 delete 操作 update 操作 完整的数据 第43课:S ...
- mysql通配符_mysql通配符使用
mysql通配符使用: w3cchool 在mysql查询中,经常会用到通配符,而且mysql的通配符和pgsql是有所不同的,甚至mysql中还可以使用正则表达式.本文就为大家带来mysql查询中通 ...
- mysql通配符大全
MySQL 通配符 SQL的模式匹配允许你使用"_"匹配任何单个字符,而"%"匹配任意数目字符(包括零个字符).在 MySQL中,SQL的模式缺省是忽略大小写的 ...
- MySQL 通配符学习小结
MySQL 通配符 SQL的模式匹配同意你使用"_"匹配不论什么单个字符,而"%"匹配随意数目字符(包含零个字符).在 MySQL中,SQL的模式缺省是忽略大写 ...
- linux通配符和正则表达式的区别总结
目录 通配符和正则表达式的区别 Linux中的通配符 通配符和正则表达式的区别 在看鸟哥的Linux私房菜的时候看到十二章一直强调通配符和正则表达式的区别,在我的理解中,两者貌似是一样的都是用来匹配的 ...
- mysql正则表达式配置,MySQL REGEXP:正则表达式
正则表达式主要用来查询和替换符合某个模式(规则)的文本内容.例如,从一个文件中提取电话号码,查找一篇文章中重复的单词.替换文章中的敏感语汇等,这些地方都可以使用正则表达式.正则表达式强大且灵活,常用于 ...
- 正则匹配查询_如何用MySQL中的正则表达式过滤掉配送单
需求 最近在用mysql做一个配送单的筛选的需求,比如一个订单表里的订单号有多种,比如以A,B,C,D,F开头的订单,我要同时过滤掉A,B与C的订单,那我要如何做呢?这里你们有其他方法的话,不妨留言哈 ...
- *在通配符及正则表达式中的差别
*在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者多个字符,不能独立使用的.比如通配符可以用*来匹配任意字符,而正则表达式不行, ...
最新文章
- 金山网盾监测:游戏玩家下载西西游戏外挂会中大量***
- 计算机课怎样回归老师控制,职业学校计算机专业课堂回归真学习
- java中邮箱发送_java实现邮箱发送(java mail)
- 从Spring中的@Transactional注解说起
- python和java还有sql区别_人人都在学编程?Python,R,Java,SQL,你究竟需要学哪一种?...
- USB转串口 TTL RS-232 RS-485 COM口 UART区别
- Shell_NotifyIcon
- Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning(TKDE2020)
- Google Python命名规范
- 百宝云网络验证对接+脚本更新功能(源码)
- TE TM TEM模的区别
- iOS为什么获取不到设备的DeviceToken
- 【Linux命令行与Shell脚本编程】三,Linux文件系统
- Apache Kylin
- java 解析m3u8的实例_m3u8文件完整实例及TS流抓取
- 【学习总结】VIO初始化学习1:Monocular Visual–Inertial State Estimation With Online Initialization and Camera–IMU
- vim使用gf(go file)跳转文件
- 老人与海好词100英文带翻译_老人与海英文读后感100字
- Android VideoView没有画面
- 如何从100万个数中找出最大的前100个数
热门文章
- Java模拟自行车电动车属性调用
- qt 取textedit 鼠标位置处单词_开源国产优麒麟20.04 V3发布:多达73处改进
- c# 屏幕快照_c# – 使用Graphics.CopyFromScreen以150%缩放比例截取屏幕截图
- 移动手机版网页模板集合
- 阿里云ECS使用ossfs挂载OSS使用 【allow_other】
- 15款最好用的腾讯短链接url批量生成工具 - 值得收藏
- 美国杀人犯在上海当老师:让中国孩子远离洋垃圾
- Android之getSharedPreferences与getDefaultSharedPreferences的区别
- 20200717-UML类图箭头
- 简要模仿淘宝购物车功能