情景概述:
在最近一次项目中,使用下面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函数为将一种数据类型转换为另一种类型。