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 
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/pztc/p/10836060.html

时间: 2024-10-21 13:43:53

mysql精准模糊查询使用CONCAT加占位符(下划线“_”)的使用,直接限定了长度和格式的相关文章

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

下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来. 另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件 SELECT * FROM [user] WHERE u_name LIKE

UITextView加占位符placeholder

@property (nonatomic ,retain) UITextView * contentText; @property (nonatomic ,retain) NSString * placeholderText; - (void)viewDidLoad{    [super viewDidLoad];    // Do any additional setup after loading the view. [email protected]"这一刻的想法..."; _c

Html学习(二)font 加粗 斜体 下划线标签学习

代码: <font size="10">6</font> <font size="2">6</font> <font color="red" size="10">红色 字号10的6</font> <font face="黑体" size="20" >这是黑色的字</font> <b>

MySQL指定模糊查询范围 或 获取或者查询数据库字段的特定几位

SUBSTR 函数 正常的: select * from sky_user WHERE name LIKE "%name%" 现在我需要匹配name的前五位 select * from sky_user WHERE SUBSTR(name,1,5) LIKE "%name%" SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分.这个函数的名称在不同的资料库中不完全一样: MySQL: SUBSTR( ), SUBSTRING( ) Oracl

mysql的模糊查询

mysql模糊查询like/REGEXP(1)like / not like MySql的like语句中的通配符:百分号.下划线和escape %:表示任意个或多个字符.可匹配任意类型和长度的字符. Sql代码 select * from user where username like '%huxiao'; select * from user where username like 'huxiao%'; select * from user where username like '%hux

【mysql】模糊查询的使用

1.like/not like 关键字的模糊查询(SQL模式) 基础模板:  SELECT  *  FROM   test  WHERE name LIKE '%你好_'     :匹配       xxxxxxx你好吗 通配符介绍: ①%     表示任意多个字符 ②_      表示一个任意字符 2.regexp/not regexp 关键字的模糊查询(正则模式) 基础模板: SELECT * FROM test WHERE name REGEXP '^ab[cde]fg$'   :匹配  

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

方法一: <!-- 根据hid,hanme,grade,模糊查询医院信息--> <select id="getHospitalLike" resultType="com.hand.hand.domain.Hospital"> SELECT * FROM hospital where hid like '%'||#{selectword}||'%' or hname like '%'||#{selectword}||'%' or grade l

吐槽 MySQL数据库jdbc操作,varchar类型占位符问题——单引号造孽

很长时间不写代码动手能力明显下降很多常见的错误还是经常发生,今天吐血了一次. 简单的坑总是要多跳几次才能甘心.很清晰的记得大学的时候在此坑差点闷死,现在又跳进这个坑了,搞了半天终于知道错在哪里. String sqlString = "insert into cryptcontent(content,assistentContent) value('asf','asfd')"; DBHelper.insertQuery(sqlString); 这样操作可以的.因此占位符应该也没问题,前

Django-orm:单表查询、基于对象和双下划线的多表操作、集合查询、分组查询、F查询和Q查询

############################################## 单表操作 ############################################## 简单查: models.User.objects.filter(id=3) # queryset对象,相当于一个列表,放了一个或多个User对象 models.User.objects.filter(id=3).first() # User对象,相当于只去了queryset对象中的第一个 增: 第一种