【发布时间】:2014-02-23 10:36:34
【问题描述】:
我正在尝试从表中的表中执行select count(*),但由于此错误,我无法执行此操作。我不知道表中的行数。
除此之外,我没有在我的查询中进行任何其他聚合。
我猜这与计数值太大而无法存储在 INTEGER 中有关。
有什么选择?
【问题讨论】:
我正在尝试从表中的表中执行select count(*),但由于此错误,我无法执行此操作。我不知道表中的行数。
除此之外,我没有在我的查询中进行任何其他聚合。
我猜这与计数值太大而无法存储在 INTEGER 中有关。
有什么选择?
【问题讨论】:
当您的会话在 Teradata 模式下运行时,COUNT 的结果是您已经注意到的 INTEGER(在 ANSI 模式下,它将是一个至少 15 位的 DECIMAL)。
解决方法很简单,将其转换为 bigint:
SELECT CAST(COUNT(*) AS BIGINT)...
【讨论】:
这是 Teradata 2616 的排名第二的 Google 热门歌曲,所以我想添加一些内容。如果您从 Teradata 中的 SUM 获得 2616“发生数值溢出”,则解决方案是先 CAST,然后是 SUM。 CAST 必须在 SUM 中:
选择 SUM(CAST(WHATEVER_QTY AS DECIMAL(38,0))) 从 TER_DATABASE.WHATEVER_TABLE ;
在我的例子中,DECIMAL(38,0) 有效,但 BIGINT 是 2616。欢迎您进行实验。这是 info.teradata 上的链接:
【讨论】: