sql的匹配和正则表达式
1. 匹配:like 关键字
#假设存在表 my_test_copy
select * from my_test_copy;
则使用like关键词匹配:注意下划线 '_'和百分号 '%'
# 下划线'_'匹配任意单个字符
# 百分号'%'匹配任意数目的字符
select * from my_test_copy where name_people like '_满_'; #有值
select * from my_test_copy where name_people like '%满%'; #有值,百分号可以匹配任意数目的字符 select * from my_test_copy where name_people like '%楼'; #有值,百分号可以匹配任意数目的字符
select * from my_test_copy where name_people like '_楼'; #为空,因为下划线只能代表一个字符
select * from my_test_copy where name_people like '_满楼'; #有值
2. 正则表达式:'rlike' 和 'regexp'同义,用于标识正则表达式模式
(1)'rlike' 和 'regexp'
select 'abc' regexp 'ab'; # regexp左操作数是要匹配的字符串,右操作数是匹配模式
select * from my_test_copy where name_people regexp '花';
select * from my_test_copy where name_people rlike '花';
(2)直接匹配
select 'abc' regexp 'b'; #返回1
select * from my_test_copy where name_people regexp '满'; #有值
(3)'^'符号,匹配开头,从字符串开始进行匹配
select * from my_test_copy where name_adress regexp '^天坛'; #为空,用于查询以....开头的字符串,而没有以'天坛'开头的字符串
select * from my_test_copy where name_adress regexp '^北'; #有值,用于查询以....开头的字符串
(4)'$'符号,匹配结尾
select * from my_test_copy where name_adress regexp '北$'; #为空,用于查询以....结尾的字符串
select * from my_test_copy where name_adress regexp '京$'; #有值
(5)点号 '.' 符号,匹配任意一个字符
select * from my_test_copy where name_adress regexp '北.'; #有值
select * from my_test_copy where name_adress regexp '.京$'; #有值
(6)'+'符号,+前面的模式至少出现1次或以上
select * from my_test_copy where name_adress regexp 'beijing+'; #有值
select * from my_test_copy where name_adress regexp '京+'; #有值
(7)'*'符号,*前面的模式出现0次或以上
select * from my_test_copy where name_adress regexp '北京*'; #有值,'北'出现,且'京'接着'北'出现0次以上
select * from my_test_copy where name_adress regexp '人*'; #有值,出现0次
(8)'?'符号,'?'前面的模式出现0次或1次
select 'abc' regexp '^(ab)?c$'; #有值
select 'aaabc' regexp '^a*b?c$'; #有值
select 'ababc' regexp '^(ab)+c$'; #有值
select * from my_test_copy where name_adress regexp '人?'; #有值,出现0次
select * from my_test_copy where name_adress regexp '京?'; #有值,出现1次
select * from my_test_copy where name_adress regexp '(山庄)?'; #有值,出现0次或1次(山庄)
select * from my_test_copy where name_adress regexp '山庄?'; #有值,出现了'山'和1次'庄'
(9)'()'符号,表示一个整体
select '' regexp '(34)1'; #返回0:表示没找到 select 'ac' regexp '^(ab)?c$'; #为0,表示未找到
select 'ababc' regexp '^(ab)?c$'; # 结果为0,'?'表示出现0次或1次 开头'(ab)',而这个句子中出现了2次'ab',不符合条件,可以写成 select 'ababc' regexp '^(ab){1,3}c$'; # {1,3}表示(ab)出现的次数在1-3次都可以
(10)'[]'符号,表示对其中的任意一个字符进行匹配,且仅能匹配一个字符
select 'heo' regexp '^h[abcde]o$'; #为1
select 'hello' regexp '^h[abcde]o$'; #为0,,虽然能匹配'e',但是两个'l'没有匹配
select 'hello' regexp '^h[abcdehijklmn]o$'; #为0,,虽然能匹配'e'和'l',但是'[]'每次只能匹配其中一个字符
select * from my_test_copy where name_adress regexp '万梅[山庄阵]'; #有值,匹配到'万梅山'
(11)'[]'中可以使用'-'表示区间,表示该区间的任意一个字符,my_test是另一个表
select 'abcde' regexp '^a[a-k]';
select 'abcde' regexp '[a-k]'; #查找是否存在字母
select * from my_test where phone_number regexp '[0-9]'; #有值,匹配到数字
select * from my_test where phone_number regexp '12[a-z]'; #为空
(12)若'[]'需要匹配']',则']'必须紧跟在'['之后
select 'aacc' regexp 'a[]a-z]'; #有值
select 'aa]cc' regexp 'a[]]'; #有值
select 'aa]cc' regexp 'a[bcc]dd]'; #为0,因为']'不是紧跟着'['
select 'aa]cc' regexp 'a[]bcac]'; #为1
select 'aa]cc' regexp 'a[bc]]'; #为0,']'放在末尾也不行
(13)若'[]'需要匹配'-',则'-'需要放在'[]'两端,放在中间可能会报错:[Err] 3697 - The regular expression contains an [x-y] character range where x comes after y.
select 'aaa-ccc-ddd' regexp 'a[-]'; #有值
select 'aaa-ccc-ddd' regexp 'a[-cdf]'; #有值,匹配到'a-'
select 'aaa-ccc-ddd' regexp 'a[d-a]'; #[Err] 3697 - The regular expression contains an [x-y] character range where x comes after y.
(14)[^]表示不含'[]'中的任意字符
#例如:不含数字
select 'aaabbb' regexp '[^0-9]'; #为1 select 'aaabbb' regexp '[^0-9]$'; #为1,不以数字结尾
select 'aaabbb233' regexp '[^0-9]$'; #为0 select 'aaabbb' regexp '^[^0-9]'; #为1,不以数字开头
select '23aaabbb' regexp '^[^0-9]'; #为0 select * from my_test_copy where name_adress regexp '[^北京]'; #表示不能只有'北京'
select * from my_test_copy where name_adress regexp '^[^北]'; #表示开头不含'北'
select * from my_test_copy where name_adress regexp '万梅[^山]'; #表示不含'万梅山'
(15)'|' 匹配分隔的任意一个字符
select 'abc' regexp 'b|a|c';
select * from my_test_copy where name_adress regexp '北京|南京'; #表示含有'北京'或'南京'的
(16)'{t}' 匹配前面的字符t次
select 'ababc' regexp '^(ab){2}c$'; #为1
select 'ababc' regexp '^ab{2}c$'; #为0,因为'b'没有出现2次
select 'abbbc' regexp '^ab{3}c$'; #为1
(17)'{t,s}'匹配前面的字符t-s次均可,t<=s
select 'abbbc' regexp '^ab{2,4}c$'; #为1,因为'b'出现3次
select 'abc' regexp '^ab{2,4}c$'; #为0,因为'b'出现1次,不在2-4之间 select 'abbbbbbc' regexp '^ab{1,}c$'; #为1,{1,}缺省,表示出现1次及以上
(18){t,s}中不能出现空格,否则报错:[Err] 3692 - Incorrect description of a {min,max} interval.
select 'aoe' regexp '^ao{0 , 1}c$'; # [Err] 3692 - Incorrect description of a {min,max} interval.
#欢迎交流
参考:
https://www.cnblogs.com/liuwei6/p/7279542.html
https://blog.csdn.net/a1311010193/article/details/101388446
https://www.runoob.com/mysql/mysql-regexp.html
sql的匹配和正则表达式的更多相关文章
- SQL模糊匹配之正则表达式
− 方括号[ ]:指定一个字符.字符串.匹配他们中的任意一个. − 示例1:查询用户名以J或者以M开头的用户信息 − SELECT user_name FROM ecs_ ...
- [转载]sql 盲注之正则表达式攻击
[转载]sql 盲注之正则表达式攻击 -----------------------------------------MYSQL 5+-------------------------------- ...
- JAVA基础之sql模糊匹配、外键以及jsp中include的用法
一.SQL模糊匹配 适用于对字符串进行模糊搜索 格式: 字段名 Like '%关键词%' % 表示这个位置可有任意个字符(没有也可以) %关键词% 只要包含关键词就算 ...
- SQL中常用模糊查询的四种匹配模式&&正则表达式
执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字 ...
- SQL Server中使用正则表达式
SQL Server 2005及以上版本支持用CLR语言(C# .NET.VB.NET)编写过程.触发器和函数,因此使得正则匹配,数据提取能够在SQL中灵活运用,大大提高了SQL处理字符串,文本等内容 ...
- sql模糊匹配
执行 数据库查询时,有完整查询和模糊查询之分. 一般模糊语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,%:表示任意0个 ...
- 中文字符匹配js正则表达式
普遍使用的正则是[\u4e00-\u9fa5],但这个范围并不完整.例如: /[\u4e00-\u9fa5]/.test( '⻏' ) // 测试部首⻏,返回false 根据Unicode 5 ...
- sql模糊匹配中%、_的处理
防sql注入之模糊匹配中%._处理: StringBuilder sbSql = new StringBuilder(); sbSql.Append(@"SELECT * from tabl ...
- sql 盲注之正则表达式攻击
-----------------------------------------MYSQL 5+----------------------------------------- 我们都已经知道,在 ...
随机推荐
- H3C Telnet 配置
Telnet 配置管理方法是网络工程师和网络管理员使用最广泛的一种设备访问控制方法,它通过局域网或广域网实现本地或远程的访问控制,但是它的实验必须要求首先对设备进行初始化配置,否则用户无法正常登录和访 ...
- 64位CreateProcess逆向:(二)0环下参数的整合即创建进程的整体流程
转载:https://bbs.pediy.com/thread-207683.htm 点击下面进入总目录: 64位Windows创建64位进程逆向分析(总目录) 在上一篇文章中,我们介绍了Create ...
- [译]如何在红帽系统(RHEL)上源码安装python3?
原文来源: https://stackoverflow.com/questions/8087184/installing-python-3-on-rhel 很容易手动安装. 1.下载对应的python ...
- orcad 删除不连接符号
1. 双击不连接符号的引脚,如下面的1脚NC 2. 进入引脚的属性界面,取消Is No Connect
- Azure上部署Barracuda WAF集群 --- 2
前面一篇文章讲了如何在Azure上部署Barracuda.这篇文章聊一聊如何配置Barracuda. License 向Barracuda的销售人员申请WAF的License.得到License后打开 ...
- TortoiseGit,git 未能顺利结束 (退出码 1)
其中一个原因是不能把Git下所有文件全部删除,一个都没有,就会报这个错误. 注:空文件夹git定义为空,不是文件.所以只有空文件夹也会报这个错误.
- mac远程连接linux 服务器桌面by VNC
为了远程使用Linux服务器,折腾了一个下午.最终看来还是用vnc最简单了. 实验室有两台强劲的Linux服务器用来做研究.之前我一直都是用ssh登到服务器上去码代码,反应速度很快,感觉很不错.但是因 ...
- 【Linux】僵尸进程,孤儿进程以及wait函数,waitpid函数(有样例,分析很详细)
本文内容: 1.僵尸进程,孤儿进程的定义,区别,产生原因,处理方法 2.wait函数,waitpid函数的分析,以及比较 背景:由于子进程的结束和父进程的运行是一个异步的过程,即父进程永远无法预测子进 ...
- Spring MVC 问题归纳
记录一些在Spring MVC配置中出现的问题 一.配置tomcat包没有加载 错误: idea调试web项目时出现:java.lang.ClassNotFoundException:org.spri ...
- 自定义 Word 默认的 Normal.dotm 模板、更改 Word 默认字体、更改 Word 默认样式(16)
1. 引言 以Office 2016为例. 有没有遇见这样的问题: 每次新建一个 Word 空白文档打开后字体默认是等线,段落默认是单倍行距,默认标题也不是自己想要的样式,等一系列问题.每次打开都要调 ...