模糊查询
MySQL模糊查询用法大全(正则、通配符、内置函数等)__陈哈哈的博客-CSDN博客_mysql模糊查询的通配符
一、通配符的分类
1. "%"百分号通配符
"%":表示任何字符出现任意次数
//查询以"结构"结尾的数据 SELECT * from biaoming where type like '%结构'; //查询出现"结构"的数据 SELECT * from biaoming where type like '%结构%'; //查询以"结构"开头的数据 SELECT * from biaoming where type like '结构%'; //......
2. "_"下划线通配符
"_":表示只能区配单个字符,不能多,也不能少
3. like操作符
如果使用like操作符时,后面没有使用("%"或者"_"),那么效果和"="是一样的
例子:下面两个语句执行结果一样
SELECT * from biaoming where type='数据结构'; SELECT * from biaoming where type like '数据结构';
所以,如果写成 select * from biaoming where type like "数据结"; 是查询不到任何东西的,因为没有 type = "数据结" 的,只有 type="数据结构"
4.注意事项:
1.MySql 在区配正文的时候,是不区分大小写的
2.通配符不能匹配 NULL
5.数据中有 "%"和"_"的情况
要加 ESCAPE 关键词进行转义
例如:数据为 "数%据_结构"
//这样子写会查询到整个表的数据 SELECT * from biaoming where type like '%_%'; //查询 带有 "_"的数据 SELECT * from biaoming where type like '%/_%' ESCAPE '/'; //查询带有 "%" 的数据 SELECT * from biaoming where type like '%/%%' ESCAPE '/';
二、使用MySql内置函数检索
1.locate()函数
返回第一次出现的位置,没找到就返回NULL
//相当于 like '%据%' SELECT * from biaoming where LOCATE('据',type)>0; //从第二个字符开始查询,像"据说"这样的数据就不会被查询出来,因为'据'在第一个字符位上 select * from biaoming where LOCATE('据',type,2)>0;
2.POSITION()
和locate的作用一样
SELECT * from biaoming where POSITION('据' IN type);
3.INSTR()
和locate一样,但是参数的位置相反
SELECT * from biaoming where INSTR(type,'据');
三、MySql regexp,rlike正则查询
1.regexp
//相对于 like '%据%' SELECT * FROM biaoming where type REGEXP '据'; //查询像 '%据%' 或者像 '%二%' 的数据 或者带有据和二的数据 select * from biaoming where type REGEXP '据|二'; //查询像 '%据%二%'的数据,且顺序一定是先据再二 select * FROM biaoming where type REGEXP '据.+二'; //查询包含[]里面字符的数据,不区分大小写 select * from biaoming where type REGEXP '[a-z]'; //区分大小写 select * from biaoming where type REGEXP BINARY '[A-Z]';
特殊符号区配:
regexp '\\.'; 区配含有.的数据
regexp '[.]' 区配含有.的数据