雪花浮点型列超出范围错误

Snowflake float type column out of range error

尝试将两个值插入 Float 类型列时出现数值超出范围错误。

create or replace table num_test(float_num float); -- create table and column
INSERT INTO num_test (float_num)VALUES (1.0528618730874378E10), (-3.694822225952521E-13);

我得到的错误显示:“数值‘10528618730.874378’超出范围。”

但是当我尝试分别插入这两个值时,它工作正常。

INSERT INTO num_test (float_num)VALUES (1.0528618730874378E10); -- ok
INSERT INTO num_test (float_num)VALUES (-3.694822225952521E-13); -- ok

对于我尝试插入的值,我在雪花 document 上看不到任何超出范围的问题。

如果非要我猜问题出在哪里,那就是“根据VALUES中的第一个值猜测的‘类型’小于第二个值的类型”。

因此,如果我们只是尝试 select 那些目标问题为零的值:

select column1, system$typeof(column1) 
from VALUES
    (1.0528618730874378E10),
    (-3.694822225952521E-13);

触发器。

Numeric value '10528618730.874378' is out of range

一次一个我们得到:

COLUMN1 SYSTEM$TYPEOF(COLUMN1)
-0.0000000000003695 NUMBER(29,28)[SB16]
COLUMN1 SYSTEM$TYPEOF(COLUMN1)
10,528,618,730.874378 NUMBER(17,6)[SB8]

果然这两个随机“数字”被转换为两种不同的类型,这些被认为“太不同了”。所以我的猜测是正确的。

如何处理:

所以我们内联转换它们:

select column1, system$typeof(column1) 
from VALUES
    (1.0528618730874378E10::double),
    (-3.694822225952521E-13::double)
    ;

我们得到

COLUMN1 SYSTEM$TYPEOF(COLUMN1)
10,528,618,730.8744 FLOAT[DOUBLE]
-0.0000000000003695 FLOAT[DOUBLE]

因此,如果我们首先告诉数据库它们是什么,并且避免自动猜测代码,那么这些值是安全的。

因此在您的上下文中:

INSERT INTO num_test (float_num)VALUES
    (1.0528618730874378E10::double),
    (-3.694822225952521E-13::double)
    ;
number of rows inserted
2