Snowflake中如何优雅去除FLATTEN转换字符串列表后的引号
问题:Snowflake中将字符串字面量列表转成行数据时,VALUE列带引号的优化实现
我想在Snowflake里把字符串字面量列表转换成行数据,查到用FLATTEN()函数可以实现,但执行以下SQL后,返回的VALUE列值带有引号:
select value from table(flatten(input => parse_json('["user1","user2"]')))
我目前用replace函数去除引号:
select replace(value, '"', '') from ( select value from table(flatten(input => parse_json('["user1","user2"]'))) )
但觉得这种方式不够优雅,有没有更优的实现方法?
优化方案
问题根源在于parse_json返回的是VARIANT类型,直接查询value时会保留JSON格式的引号。更优雅的方式是直接将VARIANT类型转换为字符串类型,无需依赖replace函数:
方法1:使用类型转换运算符::
select value::string as user_name from table(flatten(input => parse_json('["user1","user2"]')))
方法2:使用VARCHAR()函数显式转换
select varchar(value) as user_name from table(flatten(input => parse_json('["user1","user2"]')))
两种方式都能直接得到不带引号的字符串值,比replace更高效,也更符合Snowflake的类型处理规范。
内容的提问来源于stack exchange,提问作者jamiet
相关产品推荐
相关产品推荐

