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
相关产品推荐
相关产品推荐

