Mysql已支持自动进行int与bigint类型的模糊查询

原本,想要在Mysql中进行int与bigint类型的模糊查询,必须通过Mysql的cast函数将其转为字符串后再操作,如 博客1所述

但经本人测试,Mysql5.7.25就已经支持自动进行int与bigint类型的模糊查询了,下述Sql代码可直接通过Sql测试:

SELECT id,category_id,status FROM dish WHERE (category_id LIKE "%1397844303408574465%" AND status LIKE "%1%")

这意味着什么不言而喻,以后写条件查询时,大多数场景可以直接用模糊查询替换所有包含条件,将极大的简化代码需要做的if-else判断

例如,一个多条件(未知数量与类型)查询的业务,我们仅需要一行模糊查询代码即可完成:

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
// 入参为:Map<String, Object> params
//1. 获取模糊查询字段
Object[] values = params.values().toArray();
Object[] keys = params.keySet().toArray();
QueryWrapper<Entity> entityQueryWrapper = new QueryWrapper<>();
for (int i = 0; i< values.length; i++){
	entityQueryWrapper.like(StrUtil.toUnderlineCase(key), (String) values[i]); 
	//模糊查询只支持字符串,这里可以直接写死强转类型(但该查询适合任何String或Number类型)
                    这意味着什么不言而喻,以后写条件查询时,大多数场景可以直接用模糊查询替换所有包含条件,将极大的简化代码需要做的if-else判断。原本,想要在Mysql中进行int与bigint类型的模糊查询,必须通过Mysql的cast函数将其转为字符串后再操作,如。
				
有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常、警告状态)使用了位运算机制在一个int型中存储。 现在监控日志数据量非常大(亿级别)需要对数据按每小时、每天进行聚合,供在线报表使用。 状态分了3个级别:正常(0)、警告(1)、异常(2),聚合时需要使用max选择最差的状态,就需要对状态值进行处理加上级别和状态位个数,就要借助bigint型来做运算了, 问题是再将bigint 转为 int时获取原始状态值时,SQLServer报错了: 消息 8115,级别 16,状态 2,第 1 行 将 expression 转换为数据类型 int 时出现算术溢出错误。 因为状态码中
CREATE TABLE `appstat_day_prototype_201305` ( `day_key` date NOT NULL DEFAULT '1900-01-01', `appkey` varchar(20) NOT NULL DEFAULT '', `user_total` bigint(20) NOT NULL DEFAULT '0', `user_activity` bigint(20) NOT NULL DEFAULT '0', `times_total` bigint(20) N 1、TINYINT,SMALLINT,MEDIUMINTINTBIGINT,分别用8,16,24,32,64存 2、整数都有UNSIGNED可选属性 (拿tinyint字段来举例,unsigned后,字段的取值范围是0-255,而signed的范围是-128 – 127。 那么如果我们在明确不需要负值存在的情况下,通常是不要设置signed来支持负数的。) 3、对于存储和计算来
mysql数据库bigint类型字段当查询条件使用 因为bigint类型会存在精度失真的问题,当字段长度后面几位相近时,拿这个类型的字段查询时会被认为是相等的,同时被查询出来。 使用该类型作为查询条件时,我是用的时下面的方法concat()将字段转为字符类型, SELECT WHERE id = concat(1493140203433414658) AND is_deleted =0 有其他处理方法的欢迎留言 QueryWrapper<User> wrapper = new QueryWrapper<>(); 在QueryWrapper<>中,有很多已经编译好的方法,我们可以直接进行调用, ```bash @Test void test4(){ 隐式类型转换可能产生非预期的结果。 何为隐式转换:即在where语句中条件的值和条件对应的列的数据类型不一致。如 where id=‘123’,而id的类型bigint 假设有表和数据如下: CREATE TABLE `convert_test` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT
一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUBLE PRESISION),并在此基础上进行扩展。 扩展后增加了TINYINT,MEDIUMINT,BIGINT这3种长度不同的整形,并增加了BIT类型,用来存放位数据。 整数类型        字节       范围(有符号)      范围(无符号)          用途  TINYINT        1字节        (-128,127)          (0,255)    
网络上有许多似是而非的“谣言”,当然都不是恶意,绝大部分都是开发者不愿意自己主动研究,反而轻信其他人的信口之言。 关于数据库的谣言也有不少,比如“int性能比char高很多”。 我最近针对int、long、char、varchar进行了一次性能测试,发现它们其实并没有太大的性能差距: 备注:c8=char(8), s8=varchar(8), i8=(bigint), c4=char(4), s4=varchar(4), i4=char(4) 100w行无索引情况下查询: 执行[c8查询]20次, 平均耗时312.0ms 执行[s8查询]20次, 平均耗时334.3ms 执行[i8查
[size=xx-large][/size]因为业务逻辑比较变态要对int类型模糊查询。 用到了cast(RPT_YQ as varchar) like '"+cardYear+"%' RPT_YQ是年度加季度的int型, 而参数cardyear 是年度,要查询该年度所有季度的数据。...
select * from tbl_role_permission where 1=1 and cast(permission_id as varchar(10)) like '125%'; select * from tbl_role_permission where 1=1 and cast(permission_id as varchar(10...