snowflake 将科学计数法转换为十进制输出

问题描述 投票:0回答:1

嗨有谁知道如何处理雪花中的科学计数法吗?

所以我得到了一列 VALUE 和 FLOAT 数据类型,我得到了像 9.6e-05 和 0.0234 这样的值

我想用逗号替换小数点,然后与其他列连接作为我的最终结果

当我单独用硬代码值转换它时,它工作正常,但是当我在那里使用列名称时,它会弹出“函数参数太多”问题

select 'Value:'||replace(to_varchar(9.6e-05,'999.999999'),'.',',') as Result 

          输出 值:0,000096

select 'Value:'||replace(to_varchar(0.0234,'999.999999'),'.',',') as Result  

          输出 值:0,0234 

select 'Value:'||replace(to_varchar(VALUE,'999.999999'),'.',',') as Result From src

输出“函数参数过多”错误

sql type-conversion snowflake-cloud-data-platform
1个回答
0
投票

我不确定如何重现您的错误,因为所描述的问题似乎有效:

select value
    ,to_varchar(value,'999.999999') as tvc
    ,'Value:'||replace(to_varchar(VALUE,'999.999999'),'.',',') as Result
from values 
    (0.0234::float),
    (9.6e-05::float)
    as t(value);

所以我猜测 value 是一种变体数据类型,因为这是一个保留字,来自表函数的 FLATTEN 集合,因此类似于:

select *
from table(flatten(input=>parse_json('[0.0234, 9.6e-05]'))) as t;

果然,

select *
     ,to_varchar(value,'999.999999') as tvc
from table(flatten(input=>parse_json('[0.0234, 9.6e-05]'))) as t;

错误:函数 [TO_VARCHAR(T.VALUE, '999.999999')] 的参数太多,预期为 1,得到 2(第 10 行)

所以如果我们首先将变体转换为浮动:

select value
     ,to_varchar(value::float,'999.999999') as tvc
from table(flatten(input=>parse_json('[0.0234, 9.6e-05]'))) as t;

但是如果我们添加非浮点数据,例如

"not float"

select value
     ,to_varchar(value::float,'999.999999') as tvc
from table(flatten(input=>parse_json('[0.0234, 9.6e-05, "not float"]'))) as t;

我们得到:

无法将变量值“非浮动”转换为 REAL

所以我们需要使用TRY_TO_DOUBLE函数来处理失败,但是:

select value
     ,to_varchar(try_to_double(value),'999.999999') as tvc
from table(flatten(input=>parse_json('[0.0234, 9.6e-05, "not float"]'))) as t;

函数 TRY_CAST 不能与 VARIANT 和 FLOAT 类型的参数一起使用

因此我们需要将变体数据转换为 TEXT,以便可以由 TRY_TO_DOUBLE 处理,并在文本值上优雅地生成空值。

select value
     ,to_varchar(try_to_double(value::text),'999.999999') as tvc
from table(flatten(input=>parse_json('[0.0234, 9.6e-05, "not float"]'))) as t;

© www.soinside.com 2019 - 2024. All rights reserved.