You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中用IS_REAL()实现ISNUMERIC功能及报错求助

问题解决:Snowflake中带特殊字符的营收列转换为数值

核心问题分析

你遇到的错误和异常结果源于三个关键问题:

  1. 列名不一致:查询的else分支错误使用了Total_Projected_Revenue,而非原列PROJECTED_REVENUE,导致合法值(如$0)转换失败。
  2. 字符替换逻辑错误:直接替换所有'-'为空,会丢失合法的负号标记;同时IS_DOUBLE函数的使用场景错误——它仅用于判断VARIANT类型是否为DOUBLE,而非字符串是否可转换为数值。
  3. 冗余的类型判断:Snowflake提供的TRY_CAST函数可以直接实现「成功则转数值,失败则返回NULL」的需求,无需先做类型检查。

修正后的查询语句

SELECT 
    TRY_CAST(
        NULLIF(
            LTRIM(RTRIM(
                REPLACE(REPLACE(REPLACE(REPLACE(PROJECTED_REVENUE, '$', ''), ',', ''), '(', '-'), ')', '')
            )), ''
        ) AS DECIMAL(18,2)
    ) AS CLEANED_PROJECTED_REVENUE
FROM Table_Name;

逻辑说明

  1. 特殊字符清理:
    • 移除货币符号$和千分位逗号,
    • 将括号表示的负数(如($100))转换为负号格式-100
    • 去除前后空格,将空字符串转为NULL
  2. 安全转换:
    • TRY_CAST尝试将清理后的字符串转为DECIMAL(18,2),遇到非法格式(如含=、/、多个小数点)自动返回NULL

示例数据执行结果

PROJECTED_REVENUECLEANED_PROJECTED_REVENUE
$16,863.0316863.03
$16,416=8.58NULL
$3.711.25NULL
$22/187NULL
$00.00

内容的提问来源于stack exchange,提问作者user15488631

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 19:17:44