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

PostgreSQL中如何获取URL中两个斜杠之间的子串?

提取URL中第一个斜杠与第二个斜杠之间的内容(PostgreSQL)

嘿,这个需求用PostgreSQL自带的字符串函数就能轻松搞定,我给你几个实用的方案,挑顺手的用就行:

  • 方案一:用split_part(最简洁直观)
    这个函数专门用来按分隔符拆分字符串,直接取指定位置的部分就行,完全不用手动计算斜杠位置:

    SELECT split_part(url, '/', 2) AS target_part
    FROM (
        VALUES 
            ('www.abc.com/hello/xyz'),
            ('www.abc.com/hi/pqr'),
            ('www.abc.com/yellow/xyz')
    ) AS t(url);
    

    解释:split_part的三个参数分别是「要拆分的字符串」「分隔符」「目标部分的索引(从1开始)」,这里按/拆分后,第2部分就是你要的hello、hi这类内容。

  • 方案二:用substring配合正则表达式(灵活性更高)
    如果之后URL格式有变化,正则能更方便调整,比如:

    SELECT substring(url FROM '/([^/]+)/') AS target_part
    FROM (
        VALUES 
            ('www.abc.com/hello/xyz'),
            ('www.abc.com/hi/pqr'),
            ('www.abc.com/yellow/xyz')
    ) AS t(url);
    

    解释:正则/([^/]+)/会匹配第一个/,然后捕获后面直到下一个/的所有非/字符,刚好就是你要提取的部分。

  • 方案三:用position+substr手动计算位置(适合理解底层逻辑)
    要是你想手动控制截取的位置,也可以这么写:

    SELECT substr(
        url,
        position('/' IN url) + 1,
        position('/' IN url || '/' FROM position('/' IN url) + 1) - position('/' IN url) - 1
    ) AS target_part
    FROM (
        VALUES 
            ('www.abc.com/hello/xyz'),
            ('www.abc.com/hi/pqr'),
            ('www.abc.com/yellow/xyz')
    ) AS t(url);
    

    解释:先找到第一个/的位置,从它的下一位开始截取;再通过position找到第二个/的位置(给URL末尾加个/是防止URL结尾没有斜杠的情况),最后计算两个斜杠之间的长度完成截取。

这几个方案都能满足你的需求,其中split_part是最省心的,推荐优先用这个~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:55:01