比如现在有张表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加占位符(下划线“_”)的使用,直接限定了长度和格式的更多相关文章

  1. mysql 实行模糊查询 一个输入值匹配多个字段和多个输入值匹配一个字段

    mysql 实行模糊查询  一个输入值匹配多个字段 MySQL单表多字段模糊查询可以通过下面这个SQL查询实现 为啥一定要150字以上  真的麻烦  还不让贴代码了 SELECT * FROM `ma ...

  2. mysql中模糊查询的四种用法介绍

    下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...

  3. Mybatis使用MySQL进行模糊查询时输入中文检索不到结果

    Mybatis使用MySQL进行模糊查询时输入中文检索时,需要在jdbcURL后增加参数   ?useUnicode=true&characterEncoding=UTF-8

  4. 下面介绍mysql中模糊查询的四种用法:

    下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] ...

  5. mysql关联模糊查询他表字段

    如下:订单表关联了用户的id(多个),要根据用户名模糊查询订单信息,但是订单表只有id.创建视图用不着,咱也没权限.于是如下 SELECT * FROM ( SELECT cu.id AS 'id', ...

  6. mybatis中使用mysql的模糊查询字符串拼接(like)

    方法一: <!-- 根据hid,hanme,grade,模糊查询医院信息--> 方法一: List<Hospital> getHospitalLike(@Param(" ...

  7. mysql的模糊查询

    mysql模糊查询like/REGEXP(1)like / not like MySql的like语句中的通配符:百分号.下划线和escape %:表示任意个或多个字符.可匹配任意类型和长度的字符. ...

  8. 【mysql】模糊查询的使用

    1.like/not like 关键字的模糊查询(SQL模式) 基础模板:  SELECT  *  FROM   test  WHERE name LIKE '%你好_'     :匹配       ...

  9. MySQL 一般模糊查询的几种用法

    1.%:表示零个或多个字符.在某些情况下需要中文查询,一般用两个%来查询,即%%: select * from user where name like %五%; -->表示:查询user表中的 ...

随机推荐

  1. oc 执行shell 脚本

    -(id) InvokingShellScriptAtPath :(NSString*) shellScriptPath { NSTask *shellTask = [[NSTask alloc]in ...

  2. [ML] LIBSVM Data: Classification, Regression, and Multi-label

    数据库下载:LIBSVM Data: Classification, Regression, and Multi-label 一.机器学习模型的参数 模型所需的参数格式,有些为:LabeledPoin ...

  3. CentOS7或CentOS8 开机自动启用网卡的设置方法

    sudo nano /etc/sysconfig/network-scripts/ifcfg-enp0s3(p0s3是网卡,名字不同环境会有差异,输入时可按tab自动补全.) 将最后一行的 ONBOO ...

  4. JavaWeb—Nginx介绍(转载)

    Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器.基于REST架构风格,以统一资源描述符(Unifor ...

  5. python-Web-django-商城-不登陆添加购物车

    utils: # 商品多级联动 def get_category(categorys)->dict: ''' :param:商品类性 :return: {{[],[]},{[],[]},{[], ...

  6. maven 编译,测试,打包和安装工程

    编译工程,使用命令mvn compile 测试工程,使用命令mvn test 测试和编译工程,使用命令mvn test-compile 打包工程,使用命令mvn package,将工程打包成jar\w ...

  7. [转帖]国内拉取google kubernetes镜像

    国内拉取google kubernetes镜像 2019年04月19日 01:19:03 willblog 阅读数 4231 标签: kubernetes 更多 个人分类: kubernetes   ...

  8. 小程序api使用报错

    小程序连接api报错: 如若已在管理后台更新域名配置,请刷新项目配置后重新编译项目,操作路径:“项目-域名信息” 解决办法如下: 点击设置—-项目设置—勾选如下选项即可解决

  9. 「java.util.concurrent并发包」之 ThreadPoolExecutor

    一 异步用new Thread? 大写的"low"!! new Thread(new Runnable() { @Override public void run() { // T ...

  10. hdu 4471 区间条件统计 区间 不超过 x 的元素的个数

    题目传送门//res tp hdu 目的 对长度为n的区间,m次询问,每次提供一个区间两端点与一个值x,求区间内不超过x的元素个数 n 1e5 m 1e5 ai [1,1e9] (i∈[1,n]) 多 ...