MySQL模糊查询用法大全(正则、通配符、内置函数)


当前第2页 返回上一页

-- REGEXP '网' 等同于 like '%网%'

SELECT * from app_info where appName REGEXP '网';
-- 等同于
SELECT * from app_info where appName like '%网%';

3-1. regexp中的 OR : |   

功能:可以搜索多个字符串之一,相当于 or

-- 支持 "|" ‘或'符号,匹配包含“中国”或“互联网”或“大学”的数据,支持叠加多个

SELECT * from app_info where appName REGEXP '中国|互联网|大学';

-- 匹配同时命中“中国”、“网”的数据可以用".+"连接,代表中国xxxx网,中间允许有任意个字符,顺序不能反。

SELECT * from app_info where appName REGEXP '中国.+网';

3-2. REGEXP中的正则匹配 : [] 

功能:匹配[]符号中几个字符之一,支持解析正则表达式

-- 匹配包含英文字符的数据,默认不区分大小写情况下

SELECT * from app_info where appName REGEXP '[a-z]';

-- 跟like一样,取反集加 "not REGEXP" 即可,下面不再赘述

SELECT * from app_info where appName not REGEXP '[a-z]';

-- 匹配包含大写英文字符的数据,默认忽略大小写,需要加上"BINARY"关键字。如where appName REGEXP BINARY 'Hello'

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

SELECT * from app_info where appName REGEXP BINARY '[A-Z]';

-- 匹配包含数字的数据

SELECT * from app_info where appName REGEXP '[0-9]';

-- 匹配包含数字或英文的数据,

SELECT * from app_info where appName REGEXP '[a-z0-9]';

a-z、0-9都认定为一个单位,不要加多余符号,前两天就发现了一个特殊情况,很有意思的bug,跟他家分享一下

-- 之前写查询语句时多加了"|"符号,以为是"或",没有在意,但万万没想到,查出数量竟不同

SELECT * from app_info where appName REGEXP '[567]'; -- 87条
SELECT * from app_info where appName REGEXP '[5|6|7]'; -- 88条

一头雾水,赶快看看差得是哪一条

-- 原来"|"符号也参与到了匹配中,认定为一个单位。巧的是有一个数据为:“无线调音台 | Wireless Mixer” 这个正好匹配上。卧槽了个DJ

SELECT * from app_info where appName REGEXP '[5|6|7]' and pid not in (SELECT pid from app_info where appName REGEXP '[567]');

-- 查询以5、6、7其中一个为开头的数据

SELECT * from app_info where appName REGEXP '^[5|6|7]';

-- 查询以5、6、7其中一个为结尾的数据

SELECT * from app_info where appName REGEXP '[5|6|7]$';

温馨提示:MySQL中,UTF-8的中文=3个字节;GBK的中文=2个字节

-- 查询appName字节长度为10,任意内容的数据

SELECT * from app_info where appName REGEXP '^.{10}$';

-- 查询appName字节长度为10,且都为英文的数据

SELECT * from app_info where appName REGEXP '^[a-z]{10}$' ;

-- 查询appName字节长度为10,且都为大写英文的数据,加上BINARY即可

SELECT * from app_info where appName REGEXP BINARY '^[A-Z]{10}$';

-- 查询version_name字节长度为6,且都为数字或"." 的数据

SELECT * from app_info where version_name REGEXP '^[0-9.]{6}$';

-- 查询version_name字节长度为6,且都为数字或"." 的数据;要求首位为1

SELECT * from app_info where version_name REGEXP '^1[0-9.]{5}$' ;

-- 查询version_name字节长度为6,且都为数字或"." 的数据;要求首位为1,末位为7

SELECT * from app_info where version_name REGEXP '^1[0-9.]{4}7$' ;

-- 查询version_name字节长度为6位以上,且都为数字或"." 的数据;要求首位为1,末位为7

SELECT * from app_info where version_name REGEXP '^1[0-9.]{4,}7$' ;

-- 查询version_name字节长度为 6 - 8 位,且都为数字或"." 的数据;要求首位为1,末位为7

SELECT * from app_info where version_name REGEXP '^1[0-9.]{4,6}7$' ;

-- 首位字符不是中文的

SELECT * from app_info where appName REGEXP '^[ -~]';

-- 首位字符是中文的

SELECT * from app_info where appName REGEXP '^[^ -~]';

-- 查询不包含中文的数据

SELECT * from app_info where appName REGEXP '^([a-z]|[0-9]|[A-Z])+$';

-- 以5或F开头的,且包含英文的数据

SELECT * from app_info where appName REGEXP BINARY '^[5F][a-zA-Z].';

特殊符号的匹配,例如.,需要加\\(注意是两个斜杠),但是如果在[]中可以不加:

-- 匹配name中含有.的
select * from app_info where appName regexp '\\.';
-- 匹配name中含有.的
select * from app_info where appName regexp '[.]';

3-3. 字符类匹配(posix)

mysql中有一些特殊含义的符号,可以代表不同类型的匹配:

-- 匹配name中含有数字的

select * from app_info where appName regexp '[[:digit:]]';

其他的这种字符类还有:

字符类 作用
[:alnum:] 匹配字面和数字字符。(等同于[A~Za~z0~9])
[:alpha:] 匹配字母字符。(等同于[A~Za~z])
[:blank:] 匹配空格或制表符(同[\\\t])
[:cntrl:] 匹配控制字符(ASCII0到37和127)
[:digit:] 匹配十进制数字。(等同于[0-9])
[:graph:] 匹配ASCII码值范围33~126的字符。与[:print:]相似,但不包括空格字符
[:print:] 任何可打印字符
[:lower:] 匹配小写字母,等同于[a-z]
[:upper:] 匹配大写字母,等同于[A-Z]
[:space:] 匹配空白字符(同[\\f\\n\\r\\t\\v])
[:xdigit:] 匹配十六进制数字。等同于[0-9A-Fa-f]

这种字符类需要主要的外层要加一层[]。

3-4. [:<:]和[:>:]

上面的字符类中有两个比较特殊的,这两个是关于位置的,[:<:]匹配词的开始,[:>:]匹配词的结束,它们和 ^、$ 不同。

后者是匹配整个整体的开头和结束,而前者是匹配一个单词的开始和结束。

-- 只能匹配整体以a开头的,例如abcd

select * from app_info where appName regexp '^a';

-- 能匹配整体以a开头的,也能匹配中间的单词以a开头,如:dance after。

select * from app_info where appName regexp '[[:<:]]a';

[[:<:]] 、 [[:>:]] 分别匹配一个单词开头和结尾的空的字符串,这个单词开头和结尾都不是包含在alnum中的字符也不能是下划线。 

select "a word a" REGEXP "[[:<:]]word[[:>:]]"; -- 1(表示匹配) 
 
select "a xword a" REGEXP "[[:<:]]word[[:>:]]"; -- 0(表示不匹配) 
 
select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -- 1(表示匹配)

四、总结

好啦,本篇文章就到这里了,能看到这里的都是有缘人,希望本文能帮助到你对MySQL的理解更进一步。更多相关MySQL模糊查询内容请搜索

更多相关Mysql内容来自木庄网络博客


标签:Mysql

返回前面的内容

相关阅读 >>

数据库四个范式你又了解多少

mysql事务隔离级别内容的介绍(读提交)

mysql 怎样创建桌面快捷

外键ddl在oracle运行正常,在mysql报异常以及解决方案

mysql如何查询一段时间记录

mysql外键约束怎么创建

mysql如何删除多个表格数据库数据

mysql语句查询技巧有哪些

如何查看mysql语句的运行时间

mysql-5.7.28 在linux下的安装教程图解

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...