ERROR 2616计数期间数字溢出(*)

时间:2014-01-30 21:48:48

标签: sql teradata

我正在尝试从表中的表中执行select count(*),但由于此错误,我无法执行此操作。我不知道表中的行数。

除此之外,我在查询中没有进行任何其他聚合。

我想这与计数值有关,计数值太大而无法存储在INTEGER中。

有什么替代方案?

2 个答案:

答案 0 :(得分:5)

当你的会话在Teradata模式下运行时,COUNT的结果就像你已经注意到的那样是INTEGER(在ANSI模式下,它将是一个至少有15位数的DECIMAL)。

解决方法很简单,将其转换为bigint:

SELECT CAST(COUNT(*) AS BIGINT)...

答案 1 :(得分:1)

这是Teradata 2616的#2 Google热门,所以我想添加一些内容。如果你得到2616"发生数字溢出"从Teradata的SUM中,解决方案是CAST,然后是SUM。 CAST必须在SUM中:

选择 SUM(CAST(WHATEVER_QTY AS DECIMAL(38,0))) 从 TER_DATABASE.WHATEVER_TABLE;

在我的情况下,DECIMAL(38,0)工作,但BIGINT是2616.欢迎您进行实验。这是info.teradata的链接:

http://www.info.teradata.com/HTMLPubs/DB_TTU_14_00/index.html#page/SQL_Reference/B035_1145_111A/Data_Type_Conversions.098.297.html