mysql精准模糊查询使用CONCAT加占位符(下划线“_”)的使用,直接限定了长度和格式
比如现在有张表t_user,如下:(表中只是引用某某某的话,并无恶意)
| id | name |
| 1 | 司马懿 |
| 2 | 司马老贼 |
| 3 | 司马老贼OR司马懿 |
| 4 | 司马大叔 |
1.模糊查询一般用的模糊查询都是like关键词,然后再在要查的字段中用百分号“%”来查询自己想要的结果。对于上面数据,加入想查询“司马”开头的人
select * from t_user where name “司马%”;
这样查询的结果是把表中所有的数据都会查询出来。
但是,我现在需要查询以司马复姓并且名字中有1个或者两个(或者N个)的名字,显然用上面的sql是无法查询到的。
这样需要用到本篇文章要讲到的地方。用CONCAT和占位符“_”来实现。
2.在讲之前先来看下如果直接select concat的拼接会是什么样的结果
select concat("司马",“_”);###一个“_” ===============》司马_
select concat("司马",“__”,);###两个“_” ===============》司马__
select concat("司马",“__”,"OR”);###一个“_” ===============》司马__OR
可以看出,如果直接把concat的拼接当做结果查询的话,不会有任何效果,跟正常的使用concat是一样的。
所以,重要的事情要说3遍:大家不要被这里误导。大家不要被这里误导。大家不要被这里误导。
3.模糊查询中使用CONCAT和占位符“_”来精确匹配几个占位的数据(直接限定了要查数据的长度和格式)。几个下划线就是几个占位。
比如上面说的我们要查司马姓氏且名字只有一个字的人的话,我们可以用
select * from t_user where name like concat("司马","_");##一个下划线
这样我们就只能查到id为1的那条数据,而查不到其余的数据。
同理,要查司马复姓切名字有俩字的人:
select * from t_user where name like concat("司马","__"); ###俩下划线
这样我们就可以查到id为2和4的数据,而查不到其余的数据。
上面两个例子说明了此种方法是限定长度的
我们还可以做个延伸:
但是
select * from t_user where name like concat("司马","__",“OR”);##两个下划线
这样的查询是查不到任何数据的。
可是如果我们在修改成
select * from t_user where name like concat("司马","__",“OR”,"__");##前后两部分均有两个下划线,
这样我们就可以查询到id为3的数据。
所以可以看出此种方法是限定格式的
这样就达到了我们想要的“精准模糊查询”的目的
以上就是本文要说的事情,不喜勿喷。
---------------------
作者:bebmwnz
来源:CSDN
原文:https://blog.csdn.net/bebmwnz/article/details/89963996
版权声明:本文为博主原创文章,转载请附上博文链接!
mysql精准模糊查询使用CONCAT加占位符(下划线“_”)的使用,直接限定了长度和格式的更多相关文章
- mysql 实行模糊查询 一个输入值匹配多个字段和多个输入值匹配一个字段
mysql 实行模糊查询 一个输入值匹配多个字段 MySQL单表多字段模糊查询可以通过下面这个SQL查询实现 为啥一定要150字以上 真的麻烦 还不让贴代码了 SELECT * FROM `ma ...
- mysql中模糊查询的四种用法介绍
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
- Mybatis使用MySQL进行模糊查询时输入中文检索不到结果
Mybatis使用MySQL进行模糊查询时输入中文检索时,需要在jdbcURL后增加参数 ?useUnicode=true&characterEncoding=UTF-8
- 下面介绍mysql中模糊查询的四种用法:
下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...
- mysql关联模糊查询他表字段
如下:订单表关联了用户的id(多个),要根据用户名模糊查询订单信息,但是订单表只有id.创建视图用不着,咱也没权限.于是如下 SELECT * FROM ( SELECT cu.id AS 'id', ...
- mybatis中使用mysql的模糊查询字符串拼接(like)
方法一: <!-- 根据hid,hanme,grade,模糊查询医院信息--> 方法一: List<Hospital> getHospitalLike(@Param(" ...
- mysql的模糊查询
mysql模糊查询like/REGEXP(1)like / not like MySql的like语句中的通配符:百分号.下划线和escape %:表示任意个或多个字符.可匹配任意类型和长度的字符. ...
- 【mysql】模糊查询的使用
1.like/not like 关键字的模糊查询(SQL模式) 基础模板: SELECT * FROM test WHERE name LIKE '%你好_' :匹配 ...
- MySQL 一般模糊查询的几种用法
1.%:表示零个或多个字符.在某些情况下需要中文查询,一般用两个%来查询,即%%: select * from user where name like %五%; -->表示:查询user表中的 ...
随机推荐
- 新导入的项目目录结构不对(main目录)
Eclipse导入一个maven项目,碰到一个这样的错误:项目的包路径编程了main.java开头的,而java代码中的pakge却是com开头的,如图. 导致项目编译不通过 错误提示: 解决办法: ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-3.热部署在Eclipse和IDE里面的使用
笔记 3.热部署在Eclipse和IDE里面的使用 简介:讲解热部署的好处及使用注意事项,在eclipse里面默认开启,在IDE里面默认关闭 1.增加依赖 & ...
- C++之ListNode
单链表,弄清楚可stl中list的区别 ListNode的结构 struct ListNode { int val; //当前结点的值 ListNode *next; //指向下一个结点的指针 Lis ...
- Laravel的Nginx重写规则--让路由支持末尾加斜线
默认laravel路由末尾不能加/,如果加了斜线会报404 要想支持url末尾的斜线需要在public/index.php加入如下代码: $_SERVER['REQUEST_URI'] = trim( ...
- 线程池小结(JDK8)
1.线程池的好处 降低资源消耗(重复利用已创建的线程减少创建和销毁线程的开销) 提高响应速度(无须创建线程) 提高线程的可管理性 2.相关类图 JDK5以后将工作单元和执行机制分离开来,工作单元包括R ...
- 删除ELK的索引
终于找到一个工具,curator,可以搜索相关信息. 记录一下: 1,查询索引: curator_cli --host 10.2.16.191 --port 9200 show_indices - ...
- Python学习笔记——集合
1. 定义 num = {} print(type(num)) num2 = {1,2,3,4,5} print(type(num2)) <class 'dict'> <class ...
- 【转】C# DataTable 导出 Excel 进阶 多行表头、合并单元格、中文文件名乱码
本文原创地址:http://blog.csdn.net/ranbolwb/article/details/8083983 ,转载请保留本行. 本例子是上一篇 DataTable 导出 Excel 的进 ...
- 【并行计算-CUDA开发】CUDA ---- Warp解析
Warp 逻辑上,所有thread是并行的,但是,从硬件的角度来说,实际上并不是所有的thread能够在同一时刻执行,接下来我们将解释有关warp的一些本质. Warps and Thread Blo ...
- C#ModBus Tcp
C#ModBus Tcp 报文解析 上一篇博客已经完成 C#ModBus Tcp Master的实现 本篇主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文) 读操作 功能码 0x01 ...