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

Snowflake DB按分隔符拆分列:SPLIT函数使用求助

Snowflake处理特定格式字符串生成结构化表解决方案

完整SQL实现

WITH raw_data AS (
    SELECT '03::AccountID:23.04.2019;;AccountNum:1234567;;ActiveDate:Jan  1 1900 12:00AM;;BankAccount:12;11;' AS input_str
),
cleaned_data AS (
    -- 移除开头的固定前缀,拆分出独立字段条目
    SELECT 
        SPLIT_PART(input_str, '::', 2) AS cleaned_str,
        VALUE AS field_entry
    FROM raw_data,
    LATERAL SPLIT_TO_TABLE(SPLIT_PART(input_str, '::', 2), ';;')
    WHERE VALUE != '' -- 过滤分割产生的空条目
),
split_fields AS (
    -- 拆分列名、旧值、新值
    SELECT
        SPLIT_PART(field_entry, ':', 1) AS COLUMN_N,
        -- 提取冒号后第一个分号前的内容作为旧值
        SPLIT_PART(SPLIT_PART(field_entry, ':', 2), ';', 1) AS OLD_VALU,
        -- 提取第二个分号前的内容,空值则返回空字符串
        NULLIF(SPLIT_PART(SPLIT_PART(field_entry, ':', 2), ';', 2), '') AS NEW_VALUE
    FROM cleaned_data
)
SELECT * FROM split_fields;

步骤说明

  1. raw_data:定义原始输入字符串,实际使用时替换为你的表字段即可。
  2. cleaned_data:
    • 先用SPLIT_PART砍掉开头的03::前缀,只保留后面的字段内容。
    • 再通过LATERAL SPLIT_TO_TABLE按;;分割每个字段条目,同时过滤掉分割后可能出现的空行。
  3. split_fields:
    • 按:拆分出列名(COLUMN_N)和后续的取值部分。
    • 对取值部分再按;拆分,第一部分是旧值(OLD_VALU),第二部分是新值(NEW_VALUE)——用NULLIF处理没有新值的场景,确保返回空字符串而非NULL。

执行后就能得到你需要的三列结果表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:33:01