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的匹配和正则表达式的更多相关文章

  1. SQL模糊匹配之正则表达式

    −      方括号[ ]:指定一个字符.字符串.匹配他们中的任意一个. −      示例1:查询用户名以J或者以M开头的用户信息 −      SELECT user_name FROM ecs_ ...

  2. [转载]sql 盲注之正则表达式攻击

    [转载]sql 盲注之正则表达式攻击 -----------------------------------------MYSQL 5+-------------------------------- ...

  3. JAVA基础之sql模糊匹配、外键以及jsp中include的用法

    一.SQL模糊匹配 适用于对字符串进行模糊搜索 格式:   字段名 Like '%关键词%'      %          表示这个位置可有任意个字符(没有也可以) %关键词%  只要包含关键词就算 ...

  4. SQL中常用模糊查询的四种匹配模式&&正则表达式

    执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字 ...

  5. SQL Server中使用正则表达式

    SQL Server 2005及以上版本支持用CLR语言(C# .NET.VB.NET)编写过程.触发器和函数,因此使得正则匹配,数据提取能够在SQL中灵活运用,大大提高了SQL处理字符串,文本等内容 ...

  6. sql模糊匹配

    执行 数据库查询时,有完整查询和模糊查询之分. 一般模糊语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,%:表示任意0个 ...

  7. 中文字符匹配js正则表达式

    普遍使用的正则是[\u4e00-\u9fa5],但这个范围并不完整.例如:  /[\u4e00-\u9fa5]/.test( '⻏' ) // 测试部首⻏,返回false    根据Unicode 5 ...

  8. sql模糊匹配中%、_的处理

    防sql注入之模糊匹配中%._处理: StringBuilder sbSql = new StringBuilder(); sbSql.Append(@"SELECT * from tabl ...

  9. sql 盲注之正则表达式攻击

    -----------------------------------------MYSQL 5+----------------------------------------- 我们都已经知道,在 ...

随机推荐

  1. Linux下使用iptables配置防火墙端口转发

    1.背景 一些情况下,在linux上面我们想使用80-1024之间的端口,这个时候需要root权限. 当时root权限容易被提权,特别是早起那些Struct2,漏洞爆出的时候,一抓一个准-root权限 ...

  2. SpringBoot系列教程web篇之Beetl环境搭建

    前面两篇分别介绍了目前流行的模板引擎Freemaker和Thymeleaf构建web应用的方式,接下来我们看一下号称性能最好的国产模板引擎Beetl,如何搭建web环境 本文主要来自官方文档,如有疑问 ...

  3. Centos7挂载新硬盘

    1.查看系统是否检测到新的硬盘设备 ls /dev/ |grep sd linux 中所有外设都会在这个目录下,对应一个文件,其中第一块硬盘是sda,第二块硬盘是sdb,第三块硬盘是sdc.其中sda ...

  4. LeetCode 92. 反转链表 II(Reverse Linked List II)

    92. 反转链表 II 92. Reverse Linked List II 题目描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. LeetC ...

  5. django 请求 与 响应

    目录 请求(HttpRequest) 与 响应(HttpResponse) HttpRequest对象 请求相关的常用值 属性 HttpResponse对象 JsonResponse对象 render ...

  6. python 坑1

    目录 1.编码解码 2.基础数据类型补充: 2.1 str: 2.2list: 2.3tuple: 2.4dict: 2.5set: 3.坑 4.类型转换: 5.数据类型: 1.编码解码 编码:将文字 ...

  7. 中国大学MOOC-翁恺-C语言程序设计习题集(一)

    练习 02-0. 整数四则运算(10) 本题要求编写程序,计算2个正整数的和.差.积.商并输出.题目保证输入和输出全部在整型范围内. 输入格式: 输入在一行中给出2个正整数A和B. 输出格式: 在4行 ...

  8. PXC安装部署

    安装依赖与注意事项:   1. rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 1 ...

  9. Tkinter & mysql 的登录框练习

    import tkinter as tk from tkinter import messagebox import pymysql class SignIn(object): def __init_ ...

  10. javascript 同源策略和 JSONP 的工作原理

    同源策略 同源策略是一个约定,该约定阻止当前脚本获取或操作另一域的内容.同源是指:域名.协议.端口号都相同. 简单地说,A 服务器下的 a 端口执行 ajax 程序,不能获取 B 服务器或者 A 服务 ...