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

如何在SQL中按分隔符从路径字符串中提取指定片段值

SQL提取斜杠分隔路径指定片段实现方案

待处理样例路径:/path/to/file/123,分隔符为/,目标提取值为倒数第二个片段file。
核心逻辑:定位路径中最后两个斜杠的位置,截取两个斜杠中间的内容即可,不同数据库内置字符串函数存在差异,对应可落地方案如下:

  • MySQL
    直接用内置的SUBSTRING_INDEX函数实现最简洁,不需要复杂的位置计算:
    -- 基础写法
    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('/path/to/file/123', '/', -2), '/', 1) AS target_val;
    
    逻辑说明:内层函数先取倒数2个斜杠分隔的片段,返回file/123;外层函数再从这个结果里取第一个斜杠前的内容,直接得到file。如果路径可能存在末尾带斜杠的情况(比如/path/to/file/123/),可以先套一层TRIM(TRAILING '/' FROM 路径字段)清理末尾多余斜杠,避免返回空值。
  • PostgreSQL
    两种常用写法,正则写法更简洁,数组拆分写法适配性更强:
    -- 正则写法,不需要手动计算位置
    SELECT substring('/path/to/file/123' from '/([^/]+)/[^/]+/*$') AS target_val;
    
    -- 数组拆分通用写法,自动适配任意长度路径
    SELECT (string_to_array(trim(trailing '/' from '/path/to/file/123'), '/'))[
      cardinality(string_to_array(trim(trailing '/' from '/path/to/file/123'), '/')) - 1
    ] AS target_val;
    
  • SQL Server
    2022及以上版本支持STRING_SPLIT的序号参数,可以直接定位倒数第二个片段:
    SELECT value AS target_val
    FROM STRING_SPLIT('/path/to/file/123', '/', 1)
    WHERE ordinal = (SELECT MAX(ordinal) - 1 FROM STRING_SPLIT('/path/to/file/123', '/', 1));
    
  • Oracle
    用正则截取适配所有版本,不需要额外依赖:
    SELECT REGEXP_SUBSTR(
      '/path/to/file/123', 
      '[^/]+', 
      1, 
      REGEXP_COUNT('/path/to/file/123', '/') - 1
    ) AS target_val FROM dual;
    

实际业务使用时,把示例里硬编码的路径字符串替换成对应的表字段名即可。建议处理前先统一清理路径里的连续斜杠、首尾多余斜杠,避免因为路径格式不规范取到错误值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:36:24