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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:35:26