如何避免数字数据溢出

时间:2013-05-21 19:19:48

标签: mysql amazon-redshift

我的查询在我们的旧MySQL数据库中运行正常,其中有一个检查:

WHERE column_x + column_y > 524288000

现在我们已迁移到Redshift,查询失败:

ERROR: Numeric data overflow (addition)
  Detail: 
  -----------------------------------------------
  error:  Numeric data overflow (addition)
  code:      1058
  context:   
  query:     915381
  location:  numeric.hpp:112
  process:   query4_s0_22 [pid=6421]
  ----------------------------------------------- [SQL State=XX000] 

两列都是bigint类型。在不添加列的情况下运行查询(仅针对一列或另一列进行检查)时,查询执行正常。我假设有column_x + column_y大于bigint的最大大小的行。

这里的解决方法是什么?

3 个答案:

答案 0 :(得分:2)

WHERE column_x::numeric(20) + column_y::numeric(20) > 524288000

答案 1 :(得分:1)

比较之前的

倍数1 / x :)(除法会使其在0上失败):

WHERE column_x * (1/X) + column_y* (1/X) > 524288000* (1/X)

答案 2 :(得分:1)

只需将加法更改为减法:

WHERE column_x > 524288000 - column_y