Snowflake中用IS_REAL()实现ISNUMERIC功能及报错求助
问题解决:Snowflake中带特殊字符的营收列转换为数值
核心问题分析
你遇到的错误和异常结果源于三个关键问题:
- 列名不一致:查询的
else分支错误使用了Total_Projected_Revenue,而非原列PROJECTED_REVENUE,导致合法值(如$0)转换失败。 - 字符替换逻辑错误:直接替换所有
'-'为空,会丢失合法的负号标记;同时IS_DOUBLE函数的使用场景错误——它仅用于判断VARIANT类型是否为DOUBLE,而非字符串是否可转换为数值。 - 冗余的类型判断: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;
逻辑说明
- 特殊字符清理:
- 移除货币符号
$和千分位逗号, - 将括号表示的负数(如
($100))转换为负号格式-100 - 去除前后空格,将空字符串转为
NULL
- 移除货币符号
- 安全转换:
TRY_CAST尝试将清理后的字符串转为DECIMAL(18,2),遇到非法格式(如含=、/、多个小数点)自动返回NULL
示例数据执行结果
| PROJECTED_REVENUE | CLEANED_PROJECTED_REVENUE |
|---|---|
| $16,863.03 | 16863.03 |
| $16,416=8.58 | NULL |
| $3.711.25 | NULL |
| $22/187 | NULL |
| $0 | 0.00 |
内容的提问来源于stack exchange,提问作者user15488631
相关产品推荐
相关产品推荐

