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

如何在Snowflake中提取非标准格式字符串中的ID值

提取Snowflake中Ruby哈希格式字符串的ID值

你存储的是**Ruby哈希(Hash)**格式,不是标准JSON,所以parse_json会报错。需要先将其转换为标准JSON,再解析提取字段。

1. 转换Ruby哈希为标准JSON

通过多层字符串替换修正语法:

SELECT
  -- 替换Ruby的键格式 :key=> 为JSON的 "key":
  REPLACE(
    -- 替换Ruby的nil为JSON的null
    REPLACE(
      -- 给无引号的日期字符串加引号(匹配Mon, 15 May 2023这类格式)
      REGEXP_REPLACE(
        your_column_name,
        '(Mon|Tue|Wed|Thu|Fri|Sat|Sun), \d{1,2} \w{3} \d{4}',
        '"\\0"'
      ),
      'nil',
      'null'
    ),
    '=>',
    ':'
  ) AS converted_json
FROM your_table;

2. 解析JSON并提取ID字段

基于转换后的JSON,直接提取目标字段:

SELECT
  -- 转换并解析JSON
  parse_json(
    REPLACE(
      REPLACE(
        REGEXP_REPLACE(
          your_column_name,
          '(Mon|Tue|Wed|Thu|Fri|Sat|Sun), \d{1,2} \w{3} \d{4}',
          '"\\0"'
        ),
        'nil',
        'null'
      ),
      '=>',
      ':'
    )
  ) AS parsed_json,
  -- 提取old_id的id值
  parsed_json:old_id.id::VARCHAR AS old_id,
  -- 提取new_id的id值(nil转null后会显示为Snowflake的NULL)
  parsed_json:new_id.id::VARCHAR AS new_id
FROM your_table;

容错优化

如果存在格式不统一的情况,用try_parse_json避免报错,同时用IFNULL处理空值显示:

SELECT
  try_parse_json(
    REPLACE(
      REPLACE(
        REGEXP_REPLACE(
          your_column_name,
          '(Mon|Tue|Wed|Thu|Fri|Sat|Sun), \d{1,2} \w{3} \d{4}',
          '"\\0"'
        ),
        'nil',
        'null'
      ),
      '=>',
      ':'
    )
  ) AS parsed_json,
  IFNULL(parsed_json:old_id.id::VARCHAR, '无值') AS old_id,
  IFNULL(parsed_json:new_id.id::VARCHAR, '无值') AS new_id
FROM your_table;

内容的提问来源于stack exchange,提问作者reachbgk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:33:31