嗨有谁知道如何处理雪花中的科学计数法吗?
所以我得到了一列 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
输出“函数参数过多”错误
我不确定如何重现您的错误,因为所描述的问题似乎有效:
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;