半结构化数据的雪花条件类型

Snowflake condition type on semi-structured data

在 Snowflake 中,我有一个包含半结构化数据的列,该数据应该包含数字,但就半结构化数据性质而言,这并不严格。我想检查数据类型并在可能的情况下转换为浮点数。类似的东西:

SELECT IFF(TYPEOF(column_name::data_name) is NUMBER, column_name::data_name::FLOAT, null)
FROM some_table

我怎样才能让这个查询起作用?

TRY_TO_DOUBLE 是您正在寻找的工具,如果您希望它是浮点数的话。否则如果只有 Integer TRY_TO_NUMBER

SELECT try_to_double(column_name::data_name::TEXT)
FROM some_table

这里的数据库不喜欢 VARAINT 类型的输出,这是从 VARAINT 中选择一个值给你的。解决方法是先将其转换为文本:

SELECT 
    parse_json('{"data_name":3.14, "it_is_a_number":1234}') as column_name
    ,try_to_double(column_name:data_name::text) as dub
    ,try_to_number(column_name:it_is_a_number::text) as int
    ;
COLUMN_NAME DUB INT
{ "data_name": 3.14, "it_is_a_number": 1234 } 3.14 1,234