数字字段溢出异常

Day*_*his 2 sqldatatypes greenplum

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

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

INSERT INTO test_table VALUES (round(3884.90000000 / 0.00003696, 8));
Run Code Online (Sandbox Code Playgroud)

例外:

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
Run Code Online (Sandbox Code Playgroud)

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

Anu*_*eni 5

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

CREATE TABLE test_table
( 
    rate decimal(17,8)
);
Run Code Online (Sandbox Code Playgroud)

使用以下格式的十进制

decimal(precision, scale)
Run Code Online (Sandbox Code Playgroud)

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

2)数字的刻度是小数点右边小数部分的小数位数

由于insert语句的结果是105110930.73593074,所以总的位数是17,在十进制之后它有8,所以你应该使用十进制(17,8)

Select (round(3884.90000000 / 0.00003696, 8));
Run Code Online (Sandbox Code Playgroud)