项目中sql语句使用max函数,但查询结果与需求不符!

本文介绍了一个关于数据库查询中MAX函数返回不正确结果的问题及其解决方案。问题出现在使用字符型pk_id字段时,MAX函数未能返回正确的最大值。通过将pk_id转换为bigint类型,成功解决了这一问题。

情景概述:

在最近一次项目中,使用下面sql:

select * 

from HEEFSS.CZ_TSLNO 

WHERE PK_ID in ( 

SELECT MAX(B.PK_ID) FROMHEEFSS.CZ_TSLNO B WHERE SVSAC='?'

 )

测试时一直未发现问题,但在生产环境,发现MAX()函数无法查询到最大的pk_id,以致后续内容全部报错。


bug分析:

由于数据库表中pk_id采用的是字符形式存储,以致于引发的max函数错误,例:如果pk_id存储的是9和10 ,若数据类型是int、decimal类型,则10比9大,若是字符类型,则9比10 大。


修改:

采用转换pk_id数据类型的方式,将其转换为bigint类型,

select * 

from HEEFSS.CZ_TSLNO 

WHERE PK_ID in ( 

SELECT MAX(  cast(char(B.PK_ID) as bigint)) FROM HEEFSS.CZ_TSLNO B WHERE SVSAC='?'

 )


其中cast函数为将一种数据类型转换为另一种类型。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值