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;
步骤说明
- raw_data:定义原始输入字符串,实际使用时替换为你的表字段即可。
- cleaned_data:
- 先用
SPLIT_PART砍掉开头的03::前缀,只保留后面的字段内容。 - 再通过
LATERAL SPLIT_TO_TABLE按;;分割每个字段条目,同时过滤掉分割后可能出现的空行。
- 先用
- split_fields:
- 按
:拆分出列名(COLUMN_N)和后续的取值部分。 - 对取值部分再按
;拆分,第一部分是旧值(OLD_VALU),第二部分是新值(NEW_VALUE)——用NULLIF处理没有新值的场景,确保返回空字符串而非NULL。
- 按
执行后就能得到你需要的三列结果表。
内容的提问来源于stack exchange,提问作者TommyD
相关产品推荐
相关产品推荐

