SQL 正则表达式

article/2025/5/7 0:06:50

一、正则表达式

  • like与regexp的区别[1]
  • like匹配整个列[2]。如果被匹配的文本仅在列值中出现,LIKE并不会找到它,相应的行也不会返回(当然,使用通配符除外);
  • REGEXP在列值内进行匹配。如果被匹配的匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回,这时一个非常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列而不是列的子集)

区分大小写:MySQL中正则表达式匹配(从版本3.23.4后)不区分大小写 。如果要区分大小写,应该使用BINARY关键字,如where post_name REGEXP BINARY 'Hello .000'

二、like

通配符:%任意字符,_单个字符

##查找名字中有“腾”顾客
select name
from user_id
where name like '%腾%'##查找名字的姓为“张”的顾客
select name
from user_id
where name like '张%'##查找名字的最后一个字为“峰”的顾客
select name
from user_id
where name like '%峰'

三、regexp

所使用的模式表如下:

模式匹配模式的什么例子含义
^匹配字符串开头select name from 表名 where name regexp '^王'匹配姓为王的名字
$匹配字符串结尾select name from 表名 where name regexp '明$'匹配名字最后一个字为明的名字
.匹配任意字符select name from 表名 where name regexp '.明.'匹配带有明的名字
[…]匹配方括号间列出的任意字符select name from 表名 where name regexp '^[wzs]';匹配括号里任意字符的名字
[^…]匹配方括号间未列出的任意字符select name from 表名 where name regexp '^[^wzs]';匹配未在括号里任意字符的名字
p1|p2|p2交替:匹配任意p1或p2或p3select performance from 表名 where performance regexp 'A-|A|A+';匹配p1,p2,p3
*匹配前面的字符零次或者多次str*'可以匹配st/str/strr/strrr……
?匹配前面的字符零次或者1次str?'可以匹配st/str
+匹配前面的字符一次或者多次str+'可以匹配str/strr/strrr/strrrr……
{n}匹配前面的字符n次
{m,n}匹配前面的字符m至n次

例子:

## 查询所有以 'st' 开头的name
SELECT name 
FROM user  
WHERE name REGEXP'^st'## 查询所有以 'ok' 结尾的 name
SELECT name 
FROM user 
WHERE name REGEXP 'ok$'查询所有包含 'mar' 的 name
SELECT name 
FROM user  
WHERE name REGEXP 'mar'

四、not regexp: 是MySQL用于模式匹配的操作符。它比较列中的给定模式,并返回与模式不匹配的列。查找在匹配中没有的数据

##查找开头不是姓张的
select *
from user
where name not regexp '^张'##查找不含有英文字母的其他的名字
select 
from user 
where not regexp '[a-zA-Z]'

五、regexp_instr()函数

regexp_instr()函数返回与正则表达式模式匹配的子字符串的起始索引

REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]])

exp源字符串
pat正则表达式
pos可选参数,标识开始匹配的位置,默认为 1
occurrence可选参数,标识匹配的次数,默认为 1
return_option可选参数,指定返回值的类型。如果为 0,则返回匹配的第一个字符的位置。如果为 1,则返回匹配的最后一个位置,默认为 0
match_type可选参数,允许优化正则表达式。例如,可以使用此参数指定是否区分大小写
##匹配名字中的数据
select regexp_instr('cat','at')result
from user
返回:result=2
##开头为at的索引
select regexp_instr('cat','^at')result
返回:result=0                          ##有问题?
select regexp_instr('at','^at')result
返回:result=1##参数pos:指定开始位置
select regexp_instr('cat cat','cat',2)result
返回:result=5
select 
regexp_instr('cat cat','cat',2)result1,
regexp_instr('cat cat','cat',3)result2,
regexp_instr('cat cat','cat',4)result3
返回:result1=result2=result3=5
select 
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1) result1,  ##.表示任意字符
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2) result2,
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 6) result3
返回:result1=1result2=5result3=16##REGEXP_SUBSTR()检查子字符串
select 
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1) result1,  ##.表示任意字符
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2) result2,
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 6) result3
返回:result1=catresult2=cityresult3=cute##参数occurrence:匹配的子字符串是第几次出现
select 
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1,1) result1,  ##.表示任意字符
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1,2) result2,
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1,3) result3
返回:result1=5result2=16result3=0  ##对于以上的理解是指定出现的位置是第第一个字符,在这个条件下来查查找第几个匹配的字符##参数return_option:指定返回值的类型。如果为 0,则返回匹配的第一个字符的位置。如果为 1,则返回匹配的最后一个位置
select 
REGEXP_INSTR('Cat City is SO Cute!', 'C.t',1,1,0) result1,  ##.表示任意字符
REGEXP_INSTR('Cat City is SO Cute!', 'C.t',1,1,1) result2,
返回:result1=1result2=4SELECT REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 0) 'result1',REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 2, 0) 'result2',REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 3, 0) 'result3'
UNION ALL
SELECTREGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 1),REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 2, 1),REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 3, 1);
##结果是1,5,16;4,8,19##参数match_type:
指定区分大小写的匹配和不区分大小写的匹配的示例
selectREGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 'c') 'result1',REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 'i') 'result2'
返回:result1=0result2=1                          两者应该为啥不一样?

六、regexp_like()

函数用于模式匹配。它比较给定的字符串,如果字符串相同则返回,如果为真返回1,否则返回0

##形式select regexp_like(str1, str2)select regexp_like('MCA', 'mca')result
result=1  不区分大小写
select regexp_like('MCA', 'bcd')result
result=0

七、regexp_replace()函数

用于模式匹配。它通过匹配字符来替换给定的字符串。

regexp_replace(str,'旧字符串,新字符串)
##替换
select 
('zhangsan','san','si')result
result=zhangsiselect 
('Java','Java','Mysql')result
result=Mysql

八、regexp_substr()函

数用于模式匹配。它从给定的字符串中返回子串

##语法
select regexp_substr('str', 'match_type', occurrence, position, )select 
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1) result1,  ##.表示任意字符
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2) result2,
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 6) result3
返回:result1=catresult2=cityresult3=cute

7、其他

a.匹配特殊的字符需要使用\转义字

转义+特殊字符含义
\\.能够匹配.
\\f换页
\\n换行
\\r回车
\\t制表
\\纵向制表

注意:为了匹配\本身,需要使用\\\

b.匹配字符类

  • [:alnum:] 任意字母和数字(通[a-zA-Z0-9])
  • [:alpha:] 任意字符(同[a-zA-Z])
  • [:blank:] 空格和制表符(同[\\t])
  • [:digit:] 任意数字(同[0-9])
  • [:lower:] 任意小写字母
  • [:upper:] 任意大写字母
  • [:space:] 包括空格在内的任意空白字符

c.匹配多个实例,关于重复元字符

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

d.定位符

  • ^ 文本的开始
  • & 文本的结尾
  • [[:<:]] 词的开始
  • [[:>:]] 词的结尾
  • 通过使用这些定位符,能够使REGEXP起类似LIKE的作


http://chatgpt.dhexx.cn/article/IdNDBELV.shtml

相关文章

初识Nginx (一)

初识Nginx (一) Nginx适用于哪些场景 一个web请求从红色箭头进来后&#xff0c;会先经过Nginx&#xff0c;然后进入应用程序&#xff0c;然后再去访问数据库或缓存服务。 那么这里有一个问题&#xff0c;我们的应用服务要求的开发效率很高&#xff0c;所以运行效率是很低的&a…

SQL Server数据库维护计划的实施步骤(转帖)

我公司在组建局域网时&#xff0c;考虑到商业企业的特点&#xff0c;仔细考量了购、销、存三大环节中发生的各种数据及其存储问题后&#xff0c;选定了以Windows 2000 Server为操作系统&#xff0c;SQL Server 2000为数据库平台来搭建局域网的应用系统的软件平台&#xff0c;以…

达梦数据库的使用与维护

本文是从安装达梦库到使用维护的过程。 1.达梦库的安装 1.1收集软硬件信息 我是用的是本地虚拟机&#xff0c;操作系统是中标麒麟6.0&#xff0c;数据库版本为dm7_setup_rh6_64_ent_7.6.0.197_20190917。安装前需确认下机器的cpu&#xff0c;系统版本&#xff0c;空间存储等…

SQL Server 维护计划(数据库备份)

通过维护计划实现数据库完整备份 步骤一 打开数据库——》在资源管理器中找到管理——》找到维护计划——》鼠标右键新建维护计划 步骤二 在资源管器左边——》选择工具箱——》将"备份数据库"任务、"清除维护任务"、"收缩数据库"任务选项——…

【数据库管理】数据库自动维护任务介绍

概述自动维护任务的演变 10g 预定义的维护窗口Maintenance Windows预定义的自动系统任务Predefined Automatic System Tasks 11g 预定义的维护窗口Maintenance Windows预定义自动维护任务Automated Maintenance Tasks 12c 预定义的维护窗口Maintenance Windows预定义自动维护任…

服务器数据库维护需要做哪些,数据库运维究竟需要做什么?

数据库是存放数据、经常是那些高敏感度数据的宝库,因此它也毫无疑问的是合规检查程序的重点区域。几乎所有的企业合规都会对哪些人、能在什么时间、访问什么数据库作出规定,并且需要一个专职人员来管理这些权限。那么,作为管理数据库的专职人员,需要做些什么呢?下面来了解…

创建与维护MySQL数据库

目录 一、创建MySQL数据库 1.链接MySQL 2.查看当前的数据库 3.创建数据库 4.创建数据库时设置字符编码 5.查看和显示数据库的编码方式 6.使用alteer database 数据库名character set utf8; 修改数据库编码 7.进入或切换数据库 8.显示当前数据库 select database(); 二…

第10章 数据库运行维护与优化

10.1数据库运行维护基本工作 一般来说&#xff0c;维护工作主要包括:数据库的转储和恢复&#xff1b;数据库的安全性和完整性控制&#xff1b;数据库性能的监控分析和改进&#xff1b;数据库的重组和重构。 ①数据库的转储与恢复 作为数据库管理员&#xff0c;应该针对各种数…

SQL Server维护计划自动备份数据库

GPS平台、网站建设、软件开发、系统运维&#xff0c;找森大网络科技&#xff01; https://cnsendnet.taobao.com 来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p1841 使用SQL Server 2008的维护计划可以实现自动备份数据库&#xff0c;并自动删除过期备份的功…

mysql数据库维护(mysql学习笔记)

数据库备份&#xff1a; 2.数据库维护&#xff1a; analyze table用来检查表键是否正确&#xff0c;如下&#xff1a; check table 用来针对许多问题对表进行检查。在myisam表上海对索引进行检查。check table支持一系列的用于myisam表的方式&#xff0c;changed检查自最后一次…

Oracle DB 数据库维护

• 管理优化程序统计信息 • 管理自动工作量资料档案库(AWR) • 使用自动数据库诊断监视器(ADDM) • 说明和使用指导框架 • 设置预警阈值 • 使用服务器生成的预警 • 使用自动任务 数据库维护 通过复杂的Oracle DB 基础结构&#xff0c;可以方便地执行预先数据库维护&#xf…

使用SQL命令创建与维护数据库

创建数据库 create database DB_Book -- 数据库名&#xff0c;在现有连接中不可重复 on primary -- 主文件 (name DB_Book, -- 数据文件逻辑名filename D:\A_file\数据库\图书管理\DB_Book.mdf, -- 文件名及位置size 1mb, -- 初始大小maxSize 1…

sqlserver数据库得管理及维护

sqlserver数据库得管理及维护 sqlserver数据库得管理及维护 sqlserver数据库得管理及维护前言一、手动备份及恢复二、自动备份及定期清除备份集计划三、数据库日志收缩方法一&#xff1a;直接通过企业管理器收缩日志方法二&#xff1a;分离数据库及日志文件 四、数据库索引碎片…

《数据库系统实训》实验报告——数据库维护

数据库维护 第一部分&#xff1a;样例库的应用 1&#xff09;备份数据库命令&#xff1a; mysqldump -u root -p --databases test1 > /usr/local/mysql/test1.bak.sqltest1是数据库的备份文件 2&#xff09;恢复备份数据&#xff1a; 首先删除原有的数据库test1&#xf…

SQL Server 数据库维护计划

SQL Server 数据库维护计划 开始 SQL Server 维护计划向导选择计划属性新建作业计划选择维护任务选择维护任务顺序维护任务配置1. 数据库检查完整性2. 数据库完整性备份3. 数据库差异性备份4. 数据库事务日志备份5. 清除维护 选择报告选项启用邮件配置文件重启代理服务执行维护…

MySQL之数据库维护

文章目录 1 数据库维护1.1 数据库文件1.1.1 MySQL创建并管理的数据库文件1.1.2 MySQL数据库存放位置 1.2 性能状态关键指标QPS和TPS1.3 开启慢查询日志1.4 数据库备份1.4.1 myqldump示例 1.5 数据库修复1.5.1 myisamchk修复1.5.2 mysqlcheck修复1.5.3 .frm文件修复1.5.3.1 Inno…

数字电路实验怎么接线视频讲解_电工知识:三相电表怎么接线?2种接线方法一一讲解,实物对照...

之前我们介绍单项电表接线方法&#xff0c;本期我们介绍三相电表接线方法&#xff0c;主要说两种&#xff0c;一种是直接式一种是带电流互感器的。这2种接线从测量原理和构成角度来说&#xff0c;没什么差别。只不过直接式的三相电表额定电流是根据负载的电流来选的&#xff0c…

数电实验七:译码显示电路

转载自https://wu-kan.cn/_posts/2018-07-03-译码显示电路/ 数字电子技术实验报告 实验题目&#xff1a;译码显示电路 预习报告 内容一 74LS194芯片相关。 功能与真值表 CP时钟 C r ‾ \overline{Cr} Cr清零 S 1 {S_1} S1​ S 0 {S_0} S0​工作状态 Q A Q_A^ QA​ Q B …

【数电实验3】Verilog—1位十进制可逆计数器

【2022.04西南交大数电实验】 【2022.04.17 更新修改了一个错误&#xff1a; assign CO (upd & (Q 4d9)) | (~upd & (Q 4d0) & ~clr); ~clr改为了clr&#xff1a; assign CO (upd & (Q 4d9)) | (~upd & (Q 4d0) & clr); 另外 &#xff0c;把…

数电实验三-点亮四个数码管(Multisim和Basys3)

【ChatGPT】前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击查看学习资料&#xff09; 特别说明&#xff1a;该系列内容均是本人实验记录&#xff0c;无盗取侵权之嫌…