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

Snowflake中移除最后一段管道分隔内容的SQL实现求助

Snowflake SQL:提取管道分隔字符串除最后一段外的内容

可以用REGEXP_REPLACE结合正则表达式快速实现需求,自动匹配并移除最后一个管道符(含前后可能的空格)及其后的所有内容,无需提前知道管道数量。

核心SQL语句

REGEXP_REPLACE(your_column_name, '\s*\|[^|]*$', '')

正则表达式说明

  • \s*:匹配0个或多个空格,兼容管道符前带空格或不带空格的情况
  • \|:匹配管道符本身(正则中需转义)
  • [^|]*:匹配任意非管道符的字符(即最后一段的内容)
  • $:锚定到字符串结尾,确保只匹配最后一个管道符及后续内容

完整测试示例

SELECT 
  original_string,
  REGEXP_REPLACE(original_string, '\s*\|[^|]*$', '') AS trimmed_result
FROM (
  VALUES 
    ('xxx | YYY | XXX | asda | dasd12 | adasda'),
    ('32131| Y\ZYY | XXX | asda | dasd12 | 213131 | adsadfd'),
    ('no_pipe_string'), -- 无管道时返回原字符串
    ('a|b|c|d') -- 返回a|b|c
) AS test_data(original_string);

执行后会得到符合预期的结果:

original_stringtrimmed_result
xxxYYY
32131Y\ZYY
no_pipe_stringno_pipe_string
ab

备选方案:拆分后聚合(适用于分隔符格式统一的场景)

如果你的管道分隔符格式完全统一(比如都是|),也可以用拆分后聚合的方式:

SELECT 
  original_string,
  LISTAGG(part, ' | ') WITHIN GROUP (ORDER BY idx) AS trimmed_result
FROM (
  SELECT 
    original_string,
    SPLIT_PART(original_string, ' | ', idx) AS part,
    idx
  FROM test_data,
  TABLE(GENERATOR(ROWCOUNT => 100)) -- 生成足够多的行覆盖拆分数量
  WHERE SPLIT_PART(original_string, ' | ', idx) != ''
  QUALIFY idx < COUNT(*) OVER (PARTITION BY original_string)
)
GROUP BY original_string;

这个方法通过拆分字符串为多个部分,排除最后一段后重新聚合,但需要确保分隔符格式一致,灵活性不如正则方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:25:25