Mysql 模糊匹配查询

MySQL提供标准的SQL模式匹配,以及一种基于像Unix实用程序,如:vi、grep和sed的扩展正则表达式模式匹配的格式

SQL 模式

SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在MySQL中,SQL的模式缺省是忽略大小写的。

注意:在你使用SQL模式时,你不能使用=或!=;而使用LIKE或NOT LIKE比较操作符。

语法:SELECT 字段 FROM 表 WHERE 某字段 Like 条件

其中关于条件,SQL提供了两种匹配模式:

百分号(%):表示任意个或多个字符。可匹配任意类型和长度的字符。

demo1

SELECT * FROM character WHERE name LIKE ‘%孙%';

即匹配姓名为“孙行者”,“行者孙,“行者孙”等包含“孙”类型的数据

demo2

SELECT * FROM character WHERE name LIke '%孙%' and name like '%行%';

即匹配姓名为“孙行者”,“行者孙,“行者孙”等包含“孙”和“行”的数据

demo3

SELECT * FROM character WHERE name LIke '%孙%行%‘;

只能匹配姓名为“孙行者”等类似“...孙...行...”的数据

下划线(_):表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)

demo1

SELECT * FROM character WHERE name LIKE ‘_三_';

即匹配姓名为“..三..”类型的数据,前后均只有一个字符

demo2

SELECT * FROM character WHERE name LIKE ‘_三';

即匹配姓名类似“...三”类型的数据,前面有且只有一个字符

正则模式

正则表达式作用是匹配文本,将一个模式(正则表达式)与一个文本穿进行比较。

MySQL用where子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据。

MySQL正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符、字符串

select * from wp_posts where post_name REGEXP 'hello';

可以检索出列post_name中所有包含hello的行

. 匹配除\n之外的任意单个字符

select * from wp_posts where post_name REGEXP '.og';

注:.是正则表达式中的一个特殊字符。它表示匹配一个字符,因此bog,cog,dog等等都能匹配。

注意:

关于大小写的区分:MySQL中正则表达式匹配(从版本3.23.4后)不区分大小写。

如果要区分大小写,应该使用BINARY关键字,例如:

where post_name REGEXP BINARY 'Hello .000'

^匹配字符串开始位置,如查询所有姓王的人名

select name from 表名 where name REGEXP '^王';

$匹配字符串结束位置,如查询所有姓名末尾是“明”的人名

select name from 表名 where name REGEXP '明$';

进行OR匹配

为搜索两个串之一(或者这个串,或者为另外一个串),使用|。

| 作为OR操作符,表示匹配其中之一。可以给出两个以上的OR条件。

select * from products where pro_id REGEXP '1000|2000';

这样就1000和2000都能匹配并返回,当然,使用多个|就可以匹配多个串

[ ]匹配任何单一字符,是另一种形式的OR语句,可缩写的OR语句

例如,匹配范围:[0123456789]可以匹配0到9,[1-4] [4-9] 也是合法的范围。

此外,范围不一定只是数值的,[a-z]匹配任意字母字符。

例如,查询出w/z/s开头的人的人名

SELECT prod_name FROM products WHERE prod_name REGEXP '^[wzs]';

[^....]匹配不包含在[ ]的字符,如查询出chenmin之外的人名

SELECT prod_name FROM products WHERE prod_name REGEXP '^[wzs]';

^的双重用途:在集合中(用[ ]定义),它用来否定该集合。否则,用来指串的开始

匹配特殊字符使用\进行转义

\为前导。即转义,正则表达式内具有特殊意义的所有字符都必须以这种方式转义。

(1)\\- 表示查找-

(2)\\. 表示查找.

(3)\\f 表示换页

(4)\\n 表示换行

(5)\\r 表示回车

(6)\\t 表示制表

(7)\\v 表示纵向制表

匹配字符类

(``1``)[:alnum:] 任意字母和数字(同[a-zA-Z0-``9``])

(``2``)[:alpha:] 任意字符(同[a-zA-A])

(``3``)[:blank:] 空格和制表符(同[\\t])

(``4``)[:digit:] 任意数字(同[``0``-``9``])

(``5``)[:lower:] 任意小写字母(同[a-z])

(``6``)[:upper:] 任意大写字母(同[A-Z])

(``7``)[:space:] 包括空格在内的任意空白字符(同 [\\f\\n\\t\\r\\v])

(``8``)[:cntrl:] ASCII控制字符(ASCII ``0``到``31``和``127``)

(``9``)[:graph:] 与["print:]相同,但不包括空格

(``10``)[:print:] 任意可打印字符

(``11``)[:punct:] 既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符

(``12``)[:xdigit:] 任意十六进制数字(同 [a-fA-F0-``9``])

匹配多个示例,关于重复元字符

元字符 说明

* 0个或多个匹配

+ 1个或多个匹配(等于 {1, })

? 0个或1个匹配(等于 {0, 1})

{n} 指定数目的匹配

{n, } 不少于指定数目的匹配

{n ,m} 匹配数目的范围(m不超过255)

select prod_name from products where prod_name REGEXP '[[:DIGIT:]]{4}';

如前所述,[:digit:]匹配任意数字,因而它为数字的一个几何。

[[:digit:]]{4}匹配连在一起的任意4位数字,当然,上面的例子也可以这样写REGEXP '[0-9][0-9][0-9][0-9]'

定位符

^ 文本的开始

$ 文本的末尾

[[:<:>

[[:>:]] 词的结尾

注:like匹配整个串,而REGEXP匹配子串。

in查询

叫in查询不是很合理,更合理的说法是:in其实和=类似,区别在于:=后面是一个值。in后面可以是多个值。

demo1

select * from role where name in("唐三");

即匹配姓名为“唐三”一行数据;

demo2

select * from role where name in("唐三","唐三藏");

即匹配姓名为“唐三”,“唐三藏”一行数据;

demo3

select * from role where name in("唐三","%行者%")

只匹配姓名为“唐三”一行数据;即in查询不支持模糊查询,如示例4

demo4

select * from role where name in("%行者%")

无匹配结果

like contact模糊查询

CONCAT(str1,str2,…) 函数返回结果为连接参数产生的字符串。

select * from role where name like contact("%","三","%");

即匹配姓名为“唐三”,“唐三藏”等类型的数据数据;

like contact模糊查询强大的地方在于可以对传进来的参数进行某查询,比如经前端提交上的数据,赋值给参数name,则可以select * from table where name like contact("%",${name},"%")

mysql模糊匹配查询_Mysql之模糊匹配查询相关推荐

  1. mysql教程多表查询_mysql重点,表查询操作和多表查询

    表单查询 1. 完整的查询语句语法 select distinct(* or 字段名 or 四则运算 )from 表名 where 条件 group by 条件 having 条件 order by ...

  2. db2有MySQL那样的时间戳_MySQL 按照日期格式查询带有时间戳数据

    按照日期格式查询带有时间戳数据一般在MSQL数据库中的时间都是以时间戳的格式来存储时间的,但是对于我们来说,时间戳格式具体表示的是什么时间,我们很难一眼看出来,所以当我们要具体查询某一个时间或时间段的 ...

  3. mysql怎么进行单表查询_MySQL之单表查询

    一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键 ...

  4. mysql范围查找性能_MYSQL(四)查询性能优化

    优化数据访问 1.是否向数据库请求了不需要的数据 解决方式: A. 查询后加limit B. Select后写需要的列而不是* 2. 是否扫描了额外的数据 数据库的访问方式速度由慢到快:全表扫描,索引 ...

  5. mysql 多表中间表查询_mysql多表连接查询

    新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际开发中我们不会这样建表,实际开发中这两个表会有自己不同的主键.) ...

  6. MySQL数据库应用 多表查询_mysql数据库-多表查询

    今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建及多表的查询 掌握MYSQL中的表关系分析并能正确建表 昨天内容回顾: ​ 数据库的创建 : create ...

  7. mysql表单查询_MySQL表单集合查询

    表单查询 简单查询 SELECT语句 查询所有字段 指定所有字段:select 字段名1,字段名2,...from 表名; select * from 表名; 查询指定字段 select 字段名1,字 ...

  8. mysql 新建子查询_Mysql创建SQL子查询ALIAS

    通常这些被称为视图.例如: CREATE VIEW vMyLongQuery AS SELECT a, b, c FROM (LONG QUERY) X WHERE ... 然后可以像这样引用: SE ...

  9. mysql多线程查询_MySQL 利用多线程提升查询性能的一种思路

    转载自:http://dinglin.iteye.com/blog/1432443 背景 报表统计类的查询是一类耗时的查询.使用场景是QPS并不大,单每个查询由于需要访问较多数据,对大量数据做处理,执 ...

  10. mysql设置定位慢查询_mysql优化——定位慢查询

    1.定位慢查询 1.show status 命令 命令使用方式:show [session|global] status like 'slow_queries' 如果你不写  [session|glo ...

最新文章

  1. 陶哲轩实分析 习题 13.4.6
  2. 机器学习(5)--化无限为有限
  3. 【408预推免复习】计算机组成原理之指令系统
  4. 【转】二维图形的几何变换
  5. c语言稀疏矩阵做除法,稀疏矩阵的除法
  6. ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath、Server.MapPath的区别...
  7. xpath 简单小记
  8. java插件不启动_java-插件安装后Eclipse启动问题
  9. 孙鑫VC学习笔记:第十一讲 (三) 如何把元文件保存到文件当中
  10. HTML5能取代Android和iOS应用程序吗?
  11. web前端性能优化总结 1
  12. HTML与CSS面试题汇总
  13. UML统一建模语言快速入门
  14. UINO优锘:数字孪生助力运维工程场景化可视化管理
  15. 文献管理软件Mendeley优缺点分析
  16. ck6.8整合php,CKplayer-超酷网页视频播放器
  17. mybatis中count(*)与count (*)的区别
  18. Android起始内存大,调整Android Studio分配内存大小
  19. afn访问本地html,请求接口AFN报错1016,failed:unacceptablecontent-type:text/html解决办法...
  20. 聊聊苹果审核——App Store Review Guidelines

热门文章

  1. 吉米多维奇数学分析每日一题--习题1382
  2. 思科CCNA电子教程
  3. 雷达的L、S、C、X波段是什么
  4. 学生管理系统(软件工程)
  5. python爬虫百度文库源码_Python爬取百度文库学习
  6. Android Monkey Test
  7. Bjui前端框架文档链接
  8. 【运筹学】表上作业法 ( 运输规划问题最优解分析 | 退化与非退化 )
  9. 腕能助手android9,腕间应用助手(com.gmf.watchapkassistant) - 1.7 - 应用 - 酷安
  10. 工控: 西门子STEP 7安装和连接S7-200遇到的问题