DB2上不能除以零错误

时间:2015-11-30 16:24:48

标签: sql db2 division

大家好我正在使用DB2!我有一个查询,通过将里程表的变化作为分子和燃料购买总和作为分母来计算30天内的MPG。但是我有一个特殊的单位让我有些悲痛! 显然他在过去30天内没有购买任何燃料,因此导致我的查询返回错误

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

而不是实际返回0的字段,它只是空白,那么是否有一个类似于coalesce的函数会强制返回值?

感谢您的帮助!

Carnell is the source of my heartache

1 个答案:

答案 0 :(得分:2)

这意味着评估结果为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,这可以解决问题。