无法在 DB2 上除以零错误
Cannot divide by zero error on DB2
大家好我正在使用DB2!我有一个计算 30 天内的 MPG 的查询,它是通过捕获里程表的变化作为分子和燃料购买的总和作为分母来完成的。然而,我有一个特别的单位让我有些悲伤!
显然他在过去 30 天内没有购买任何燃料,因此他导致我的查询 return 出错
Division by zero was attempted. SQLState = 22012
我以为我可以聪明地使用 coalesce
但它是一种不受支持的类型。
这里是查询mpg!
ROUND(((SELECT MAX(ODOMETER)-MIN(ODOMETER) FROM ODOHIST O
WHERE READINGDATE >= CURRENT DATE - 30 DAYS AND O.UNIT_ID = DEFAULT_PUNIT)/
(SELECT SUM(T2.VOL_PFUEL) FROM FC_POS T2 WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS)),2) AS MPG_30DAYS
而不是实际 return 字段 0 它只是空白,所以是否有类似于 coalesce
的函数将强制 return 值?
感谢您的帮助!
这意味着它的计算结果为 0:
(SELECT SUM(T2.VOL_PFUEL)
FROM FC_POS T2
WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS
)
我的建议是在语句中使用NULLIF()
:
(SELECT NULLIF(SUM(T2.VOL_PFUEL), 0)
FROM FC_POS T2
WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS
)
这会将 0
替换为 NULL
,这应该可以解决问题。
大家好我正在使用DB2!我有一个计算 30 天内的 MPG 的查询,它是通过捕获里程表的变化作为分子和燃料购买的总和作为分母来完成的。然而,我有一个特别的单位让我有些悲伤! 显然他在过去 30 天内没有购买任何燃料,因此他导致我的查询 return 出错
Division by zero was attempted. SQLState = 22012
我以为我可以聪明地使用 coalesce
但它是一种不受支持的类型。
这里是查询mpg!
ROUND(((SELECT MAX(ODOMETER)-MIN(ODOMETER) FROM ODOHIST O
WHERE READINGDATE >= CURRENT DATE - 30 DAYS AND O.UNIT_ID = DEFAULT_PUNIT)/
(SELECT SUM(T2.VOL_PFUEL) FROM FC_POS T2 WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS)),2) AS MPG_30DAYS
而不是实际 return 字段 0 它只是空白,所以是否有类似于 coalesce
的函数将强制 return 值?
感谢您的帮助!
这意味着它的计算结果为 0:
(SELECT SUM(T2.VOL_PFUEL)
FROM FC_POS T2
WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS
)
我的建议是在语句中使用NULLIF()
:
(SELECT NULLIF(SUM(T2.VOL_PFUEL), 0)
FROM FC_POS T2
WHERE T2.DRIVER_ID = DRIVER.DRIVER_ID AND POS_DATE >= CURRENT DATE - 30 DAYS
)
这会将 0
替换为 NULL
,这应该可以解决问题。