如何解决错误:在mysql中将1365除以0

时间:2017-08-16 09:58:05

标签: mysql

我想从查询生成insert to table,但是这个查询可能会抛出除以零的错误:

insert into rpp
select IFNULL(IF((IF(((((((`s`.`smi` + `s`.`jmb`) + `s`.`ruah`) +
`s`.`stg_jd`) + `s`.`jdw_pro`) / `p`.`rate`) <= 2),
((`p`.`rate` * 4) - ((((`s`.`smi` + `s`.`jmb`) + `s`.`ruah`) 
+ `s`.`stg_jd`) + `s`.`jdw_pro`)),0) > 0),
(FLOOR((IF(((((((`s`.`smi` + `s`.`jmb`) + `s`.`ruah`) 
+ `s`.`stg_jd`) + `s`.`jdw_pro`) / `p`.`rate`) <= 2),
((`p`.`rate` * 4) - ((((`s`.`smi` + `s`.`jmb`) + 
`s`.`ruah`) + `s`.`stg_jd`) + `s`.`jdw_pro`)),
0) / `p`.`bets`)) * `p`.`bets`),0),0) AS `rp`
FROM (`produk` `p`LEFT JOIN `stok` `s` ON ((`p`.`kode` = `s`.`kode_produk`)))

提前致谢!

1 个答案:

答案 0 :(得分:0)

有多种方法可以解决这个问题。

添加逻辑,您将其除以1,或者您想要处理它。对于这个,这个奇妙的函数IF()就像IF(condition, then, else)一样,例如IF(my_column = 0, 1, my_column)

另一种方法是相应地设置sql_mode。看一下sql_mode error_for_division_by_zero

  

ERROR_FOR_DIVISION_BY_ZERO模式会影响除法的处理   零,包括MOD(N,0)。对于数据更改操作(INSERT,   UPDATE),其效果还取决于是否是严格的SQL模式   启用。

     

如果未启用此模式,除以零将插入NULL并且不会发出警告。

     

如果启用此模式,则除以零将插入NULL并生成警告。

     

如果启用此模式和严格模式,除非同时给出IGNORE,除以零会产生错误。对于INSERT IGNORE   和UPDATE IGNORE,除以零插入NULL并生成一个   警告。

     

对于SELECT,除以零返回NULL。启用   ERROR_FOR_DIVISION_BY_ZERO也会产生警告,   无论是否启用严格模式。

     

自MySQL 5.7.4起,不推荐使用ERROR_FOR_DIVISION_BY_ZERO。在MySQL中   5.7.4到5.7.7,ERROR_FOR_DIVISION_BY_ZERO在明确命名时不执行任何操作。相反,它的效果包含在效果中   严格的SQL模式。在MySQL 5.7.8及更高版本中,ERROR_FOR_DIVISION_BY_ZERO   明确命名时确实有效,并且不是严格的一部分   模式,如MySQL 5.7.4之前。但是,它应该结合使用   使用严格模式并默认启用。如果发生警告   ERROR_FOR_DIVISION_BY_ZERO已启用,但未启用严格   模式,反之亦然。有关其他讨论,请参阅SQL模式更改   MySQL 5.7。

     

由于不推荐使用ERROR_FOR_DIVISION_BY_ZERO,因此会将其删除   在未来的MySQL版本中作为单独的模式名称及其效果   包含在严格的SQL模式的影响中。