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

Presto SQL分割字符串如何获取最后一个分隔符前的全部内容

Presto 提取斜杠分隔字符串最后一个分隔符前的内容

你提到的「先定位最后一个'/'的位置再截取」的思路完全可行,Presto中可以通过内置函数直接实现,不需要依赖复杂的嵌套反转逻辑。

方法1:定位最后一个'/'的位置后截取

Presto没有直接提供「查找字符最后一次出现位置」的函数,可以通过反转字符串的方式间接计算位置,再用substr完成截取,语句如下:

SELECT
  substr(
    column_name,
    1,
    length(column_name) - strpos(reverse(column_name), '/')
  ) AS target_content
FROM your_table;

逻辑说明:

  • 先将原字符串反转,通过strpos拿到反转后第一个'/'的位置,这个值等价于原字符串中最后一个'/'距离字符串末尾的偏移量
  • 用原字符串总长度减去这个偏移量,就能得到最后一个'/'在原字符串中的下标位置
  • 从字符串第一位开始截取到该下标前一位,就能得到最后一个'/'之前的全部内容,对示例值Hello/Hi/Howdy/Bye会返回预期的Hello/Hi/Howdy

注意:你提到的把位置索引传入split_part()的写法无法实现需求,因为split_part()的第三个参数是指定「取拆分后的第几个分段」,不是按字符位置截断,无法直接返回前面所有分段拼接的结果。

方法2:正则替换(更简洁)

不需要计算位置,直接用正则匹配最后一个'/'和它后面的所有内容,替换为空即可,写法更简洁:

SELECT
  regexp_replace(column_name, '/[^/]*$', '') AS target_content
FROM your_table;

逻辑说明:

  • 正则中$匹配字符串结尾,[^/]*匹配连续的非'/'字符
  • 整体匹配的内容就是「字符串末尾处最后一个'/' + 后面跟着的最后一个分段内容」,替换为空后剩下的就是需要的结果

两种写法对「字符串中不存在'/'」的边界场景都会直接返回原字符串,不会抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:30:38