【问题标题】:Numeric field overflow exception数值字段溢出异常
【发布时间】:2018-02-09 04:33:56
【问题描述】:

我应该如何重写我的插入语句?

CREATE TABLE test_table ( 
    rate decimal(16,8)
);

INSERT INTO test_table VALUES (round(3884.90000000 / 0.00003696, 8));

例外:

ERROR: numeric field overflow
SQL state: 22003
Detail: A field with precision 16, scale 8 must round to an absolute value less than 10^8. Rounded overflowing value: 105110930.73593074

数据库:Greenplum Database 4.3.8.0 build 1(基于 PostgreSQL 8.2.15)

【问题讨论】:

    标签: sqldatatypes greenplum


    【解决方案1】:

    你应该使用小数(17,8)

    CREATE TABLE test_table
    ( 
        rate decimal(17,8)
    );
    

    使用以下格式的小数

    decimal(precision, scale)
    

    1) 数值的精度是整数中有效位数的总和,即小数点两边的位数

    2) 数字的小数位数是小数部分的小数位数,在小数点右侧

    由于插入语句的结果是 105110930.73593074,总位数为 17,小数点后为 8,因此您应该使用小数(17,8)

    Select (round(3884.90000000 / 0.00003696, 8));
    

    【讨论】:

      猜你喜欢
      • 2020-10-16
      • 2014-06-17
      • 1970-01-01
      • 2010-10-27
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多