2

我有一个在我们的旧 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] 

两列都是 type bigint。在不添加列(仅检查一列或另一列)的情况下运行查询时,查询执行良好。我假设有行column_x + column_y大于bigint.

这里有什么解决方法?

4

3 回答 3

2
WHERE column_x::numeric(20) + column_y::numeric(20) > 524288000
于 2013-05-21T19:45:40.170 回答
2

只需将加法改为减法:

WHERE column_x > 524288000 - column_y
于 2013-05-30T13:03:23.763 回答
1

在比较之前乘以 1/x :) (除将使其在 0 上失败):

WHERE column_x * (1/X) + column_y* (1/X) > 524288000* (1/X)
于 2013-05-21T19:24:57.957 回答