【问题标题】:ERROR 2616 Numeric overflow during computation while doing count(*)ERROR 2616 在进行计数(*)时计算期间出现数值溢出
【发布时间】:2014-02-23 10:36:34
【问题描述】:

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

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

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

有什么选择?

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

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

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

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

    【讨论】:

    • 我真的希望 Teradata 模式能够升级到 BIGINT,如果它们不完全符合 ANSI。就像我希望 Excel 不会在 DECIMAL(18,0) 或更大时窒息一样。 :)
    • ANSI 不讨论数值精度,这始终是“实现定义的”。如果您想更好地遵守 ANSI,您只需将会话模式切换到 ANSI。 Excel 已经在 DEC(16) 上窒息了,因为它将所有内容都存储/处理为 FLOAT :-)
    • 不,谢谢。我对 Teradata 模式的微妙之处非常满意。 :)
    【解决方案2】:

    这是 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 上的链接:

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

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 2023-03-23
      • 2012-08-09
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多