如何使用SQL提取Snowflake列中两种分隔符间的中间值?
解决方案
单个值提取中间段
如果列里是单个用-分隔的字符串(比如6891-HCB-ENG),直接用SPLIT_PART函数提取中间部分:
SELECT bundle_availability_ids, SPLIT_PART(bundle_availability_ids, '-', 2) AS middle_segment FROM your_table;
SPLIT_PART的参数依次是:目标列、分隔符、要提取的段的位置(这里取第2段)。
多值(|分隔)的处理
如果列里包含多个用|分隔的子串,分两种场景处理:
场景1:将每个中间段转为单独行
用SPLIT_TO_TABLE先把|分隔的子串拆成多行,再提取每行的中间段:
WITH split_substrings AS ( SELECT -- 替换成你的表主键/唯一标识列,用来关联原数据 id, split_row.value AS single_bundle_id FROM your_table, TABLE(SPLIT_TO_TABLE(bundle_availability_ids, '|')) AS split_row ) SELECT id, SPLIT_PART(single_bundle_id, '-', 2) AS middle_segment FROM split_substrings;
场景2:将每个中间段转为同一行的不同列
如果需要把多个中间段放在同一行的不同列里,先预估最大的子串数量(比如最多4个),嵌套使用SPLIT_PART:
SELECT bundle_availability_ids, SPLIT_PART(SPLIT_PART(bundle_availability_ids, '|', 1), '-', 2) AS middle_segment_1, SPLIT_PART(SPLIT_PART(bundle_availability_ids, '|', 2), '-', 2) AS middle_segment_2, SPLIT_PART(SPLIT_PART(bundle_availability_ids, '|', 3), '-', 2) AS middle_segment_3, SPLIT_PART(SPLIT_PART(bundle_availability_ids, '|', 4), '-', 2) AS middle_segment_4 FROM your_table;
如果子串数量不确定,这种方式会产生空值列;日常场景下行转的方式(场景1)更灵活实用。
内容的提问来源于stack exchange,提问作者Catalina Tocasuchil
相关产品推荐
相关产品推荐

