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

来源:互联网 发布:乔丹新秀赛季数据 编辑:程序博客网 时间:2024/06/05 15:21

情景概述:

在最近一次项目中,使用下面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)) FROMHEEFSS.CZ_TSLNO B WHERE SVSAC='?'

 )


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

原创粉丝点击