雪花浮点型列超出范围错误
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
尝试将两个值插入 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 |