如何获取 Snowflake 上类型转换失败的列名

How to get the column name that failed a type conversion on Snowflake

考虑以下 SQL:

SELECT
  value::number,
  discount::number
FROM data

假设有一行 valuediscount 的值是 002:23,无法转换为数字。然后 Snowflake 会失败并出现类似于以下的错误:

100038 (22018): 01902838-0221-536e-0000-9ef90010d4d6: Numeric value '002:36' is not recognized

有没有办法知道这个失败值来自哪一列?这将极大地帮助调试 table 将数十列解析为数字。

我就是这样做的,我会测试每一列,看看哪里出了问题。

希望对你有帮助...丰富

SELECT  value
FROM    data
WHERE   value IS NOT NULL 
AND     TRY_TO_NUMBER(value) IS NULL;

您可以使用 TRY_CAST 而不是 ::number 进行转换,这将 return NULL 而不是在无法转换值时抛出错误:

SELECT TRY_CAST(值作为数字)作为 "value", TRY_CAST(折扣为数字)为 "discount" 来自数据

更多详情:https://docs.snowflake.net/manuals/sql-reference/functions/try_cast.html