mysql bc_正则表达式——MySQL搜索过滤
正则表达式介绍
在数据库的数据过滤过程中只用WHERE子句和LIKE操作符都是对于已知值进行的
不管是匹配一个还是多个值,测试大于还是小于已知值,或者检查某个范围的值,都是使用已知的值
当然MySQL语句也提供了通配符百分号(%)和下划线(_)来匹配多个和单个字符
在检索名中包含某些文本或字符的字段时确实很有用,但是这种功能也是有代价的
因为通配符和搜索的处理一般要比有些搜索所花时间要长,而且会使WHERE子句本身过于复杂
这也就是正则表达式变得有用的地方,所有程序设计语言、文本编辑器、操作系统等都支持正则表达式
正则表达式是用来匹配文本的特殊串,用正则表达式语言来建立,所以这也是你必须所学习的特殊语法和指令
全文阅读和自己练习尝试需要大概十五分钟左右,熟练运用SQL语句中还得需要你自己不断地积累和使用,希望不会浪费读者宝贵的时间
通配符小技巧
虽然通配符搜索处理要比其他搜索时间所花时间要长,但是在数据量不大的时候还是建议使用的
这里在讲正则表达式之前还是先给出一些使用通配符要记住的技巧:
1. 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符
2. 除非绝对必要,否则不要把他们用在搜索模式的开始处。这样搜索起来是最慢的
3. 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据
学习使用正则表达式
我们从一个简单的例子开始,下面检索列Name带文本aba的部分行
这里我们先提一个问题,正则表达式和通配符匹配区分大小写吗?仔细观察下面检索的对象,你就知道答案了
这我们看到关键字REGEXP声明后面的东西作为正则表达式处理,就得到了所有Name列包含aba文本的数据,而且你也发现它们是不区分大小写的
这时候你可能就要问,为什么要那么费力使用正则表达式?在刚才的例子中,没有体现出带来的好处,还可能降低性能,也确实没有以下通配符的方法简单
SELECT *
FROM city
WHERE Name LIKE '%aba%'
ORDER BY Name
LIMIT 10;
接下来,请考虑接下来的这些例子
这里使用了正则表达式.East。.是正则表达式中的一个特殊字符,表示匹配任意一个字符
|是正则表达式的OR操作,它表示匹配其中之一,多个OR条件可以并入单个正则表达式。
从这里开始终于开始有属于正则表达式自己独有的匹配方式了
这里大家应该就有些看不懂这有些复杂的正则表达式了,所以接下来介绍所有正则表达式的其他语法
中括号
中括号中添加可以匹配的字符,但是本身只能匹配一个其中一个字符,比如说[123]就是匹配1、2或3
还可以匹配范围,为了简化[123456789]这种过于冗长的集合,可使用-来定义一个范围,比如说[1-9]和刚才的集合是一样的
标识符
^ :有两个作用,一个是在集合中表示否定该集合,一个是作为定位符表示指文本的开始处
[^123] :匹配除了1、2或3这些字符外的其他东西
^a :文本的开头是a字符
$ :和^相反,这是文本结尾的标识符
匹配特殊字符
为了匹配特殊字符,必须用\为前导,这种处理就是所谓的转义,这样也存在了很多空白元字符
\f:换页
\n:换行
\r:回车
\t:制表
\v:纵向制表
多数正则表达式都是用单反斜杠转义,而MySQL要求两个是因为自己解释一个,正则表达库解释另一个
匹配字符类
为了方便工作,可以使用预定义的字符集,成为字符类
[:alnum:]:任意字母或者数字
[:alpha:]:任意字符
[:blank:]:空格和制表
[:cntrl:]:ASCII控制字符
[:digit:]:任意数字
[:graph:]:与[:print:]相同,但是不包括空格
[:lower:]:任意小写字母
[:print:]:任意可打印字符
[:punct:]:不在[:alnum:],但又在[:cntrl:]的任意字符
[:space:]:包括空格在内的任意空白字符
[:upper:]:任意大写字母
[:xdigit:]:任意十六进制数字
匹配多个实例
目前为止所有的正则表达式都试图匹配单次出现,但是有时需要对匹配的数目进行更强的控制
*:0个或多个匹配
+:一个或多个匹配
?:0个或1个匹配
{n}:指定数目的匹配
{n,}:不少于指定数目的匹配
{n,m}:匹配数目的范围
总结
以上基本就是常用到的MySQL正则表达式语法了,如果说你还没有合适的表来做练习,这里还有一个简单的测试方法
SELECT 'hello' REGEXP '[0-9]'
REGEXP检查总是返回0(没有匹配)或者1(匹配),所以显然这个语句的答案是返回0
总结下来你会发现,REGEXP和LIKE的不同在于,LIKE匹配整个串,而REGEXP匹配子串
正则表达式涉及的范围是很广的,本人在自学Linux的Bash编程时也是常常用到它,所以这是你必须掌握的技能
文章如果存在问题或者有其他可以添加的语法,希望大佬斧正和评论,希望我和大家一起进步一起优秀
mysql bc_正则表达式——MySQL搜索过滤相关推荐
- mysql 搜索正则表达式_[MySQL] 用正则表达式进行搜索
正则表达式的作用就是匹配文本,讲一个模式(正则表达式)与一个文本串进行比较. 基本字符匹配 SELECT 列名 FROM 表名 WHERE 列名 REGEXP 条件 ORDER BY 列名; 形式与L ...
- mysql 正则去小数位_mysql必知必会--用正则表达式 进行搜索
正则表达式介绍 前两章中的过滤例子允许用匹配.比较和通配操作符寻找数据.对 于基本的过滤(或者甚至是某些不那么基本的过滤),这样就足够了.但 随着过滤条件的复杂性的增加, WHERE 子句本身的复杂性 ...
- mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法
Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...
- MySQL的正则表达式
1. Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符.字符串. 例如:select * from wp_posts where post_name REGEXP 'hello', ...
- MySQL使用正则表达式
MySQL是一个流行的开放源代码数据库软件.MySQL率先提供了正则表达式支持作为一种数据库搜索手段. MySQL对正则表达式的支持体现在允许在where子句里面使用如下格式的表达式: REGEXP ...
- 如何使用MySQL的全文本搜索功能
全本文搜索 1.全文本搜索 1.1理解全文本搜索 2.使用全文搜索 2.1启用全文本搜索支持 2.2进行全文本搜索 2.3使用查询扩展 2.4布尔文本搜索 2.5全文搜索的使用说明 1.全文本搜索 1 ...
- 快速回顾 MySQL:全文本搜索
前提要述:参考书籍<MySQL必知必会> 文章目录 14.1 全文本搜索 14.1.1 启动全文本搜索 14.1.2 使用全文本搜索 14.1.3 使用查询扩展 14.1.4 使用布尔查询 ...
- 1.Mysql 的正则表达式
2018-11-26 MySQL 学习笔记 周谦 MySQL 学习笔记 MySQL 的安装 2.1 MySQL 安装与配置 2.1.1 MYSQL 的安装 1.打开下载的 mysql 安装文件 mys ...
- mysql数据库搜索字符_在MySQL数据库中快速搜索字符串?
使用FULLTEXT搜索来快速搜索字符串.让我们首先创建一个表-mysql> create table DemoTable1554 -> ( -> Title text -> ...
最新文章
- matlab调用c++生成dll32位与64位对应关系
- zcmu-1644 多连块拼图
- Android adb.exe程序启动不起来,如何处理
- ubuntu学习摘要-ubuntu root用户
- python3 三级菜单-基础版
- 二叉树遍历算法之三:后序遍历
- xmm1是什么器件_第三章基于Multisim10在模拟电路实验中的应用
- 计算机内存不够在哪里清扫,电脑内存不足怎么清理
- 【2020年领域新星】 Ruibo Liu 达特茅斯学院
- 解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上,运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本,激活win10步骤流程。
- 中华流传十大吉祥图解
- 计网实验七:应用层协议服务配置(DNS,HTTP,FTP)
- Android打开蓝牙的两种方式
- java百万级别的并发_抗住百万高并发的 6 个关键技术!
- htonl,htons,ntohl,ntohs的详解
- 【开源工程】STM32C8T6+ADC信号采集+OLED波形显示
- 代理软件cntlm之下载、安装、配置及使用
- iOS 开发问与答(142-159)
- 重庆大学计算机学院刘然,重庆大学考研研究生导师简介-刘然
- 光学相控阵技术能否用于生物雷达