在雪花中使用 try_cast 处理非常长的数字

Posted

技术标签:

【中文标题】在雪花中使用 try_cast 处理非常长的数字【英文标题】:Using try_cast in snowflake to deal with very long numbers 【发布时间】:2021-01-27 16:44:53 【问题描述】:

我在雪花中使用 try_cast 将 sql 中的任何长值转换为 NULL。

这是我的代码:

当我尝试运行上述代码时,我收到如下错误:

我正在展平 JSON 数组并使用 try_cast 将任何大值设为 NULL,因为我收到错误 无法转换变量值 numberLong: -8301085358432

SELECT try_cast(item.value:price) as item_price,
       try_cast(item.value:total_price_bill) as items_total_price
FROM table, LATERAL FLATTEN(input => products) item

错误:

第 1 行位置 ')' 处的 SQL 编译错误错误。

我不明白我在哪里做错了

【问题讨论】:

【参考方案1】:

您对 try_cast 使用了错误的语法。根据snowflake documentations,语法是:

TRY_CAST( <source_string_expr> AS <target_data_type> )

还要注意:

    仅适用于字符串表达式。 target_data_type 必须是以下之一: VARCHAR(或其任何同义词) NUMBER(或其任何同义词) 双重 布尔值 日期 时间 TIMESTAMP、TIMESTAMP_LTZ、TIMESTAMP_NTZ 或 TIMESTAMP_TZ

例如,如果item.value:price 是字符串,则必须有这样的东西:

select try_cast(item.value:price as NUMBER) as item_price,
....

【讨论】:

以上是关于在雪花中使用 try_cast 处理非常长的数字的主要内容,如果未能解决你的问题,请参考以下文章

哈尔滨理工大学2016新生赛H题

数据仓库中的几种模型

在雪花结果集中用逗号分隔输出数字

雪,在灯下才美丽

冬天的雪

是否有任何用户定义/自定义的 FORMAT 和 TRY_CAST?