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

如何在Snowflake中从SQL表的JSON字段提取指定键值对?

提取Snowflake JSON字段中指定键值的方法

嘿,我完全理解从MSSQL切换到Snowflake时,在JSON处理上的适应期——毕竟两个系统的JSON操作语法确实有差异!针对你想从Name字段(示例值:{En: "lunch", fr: "diner"})提取En对应值的需求,这里有几种实用的方法:

方法1:使用点符号直接访问(最简洁)

Snowflake支持通过:符号直接访问JSON对象的键,不过如果你的Name字段是字符串类型(比如VARCHAR/STRING),需要先用PARSE_JSON()把它转换成Snowflake的JSON OBJECT类型:

-- 处理字符串类型的JSON字段
SELECT PARSE_JSON(Name):En AS english_name
FROM your_table_name;

-- 如果Name字段已经是OBJECT类型(Snowflake可直接存储JSON对象)
SELECT Name:En AS english_name
FROM your_table_name;

这种写法比TSQL的JSON_VALUE更直观,结果会返回对应的值(这里就是"lunch")。

方法2:使用GET_PATH函数(贴近MSSQL习惯)

如果你更习惯类似JSON_VALUE的路径参数写法,可以用Snowflake的GET_PATH函数,它接受JSON对象和键路径作为参数:

-- 字符串类型JSON字段
SELECT GET_PATH(PARSE_JSON(Name), 'En') AS english_name
FROM your_table_name;

-- OBJECT类型JSON字段
SELECT GET_PATH(Name, 'En') AS english_name
FROM your_table_name;

额外注意事项

  • 如果JSON键名包含特殊字符(比如空格、连字符),需要用双引号包裹键名,比如PARSE_JSON(Name):"En-Name"或者GET_PATH(PARSE_JSON(Name), '"En-Name"')
  • 若部分数据中没有En键,返回结果会是NULL,你可以用IFNULL或COALESCE处理默认值:
    SELECT IFNULL(PARSE_JSON(Name):En, 'No English name provided') AS english_name
    FROM your_table_name;
    

内容的提问来源于stack exchange,提问作者alexis.sylvestre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:47:55