在PostgreSQL中获取2个字符之间的子串

问题描述 投票:0回答:3

我试图在postgreSQL中获取像这样的URL之间的字符:

呜呜呜.ABC.com/hello/下一站

呜呜呜.ABC.com/Hi/贫穷人

呜呜呜.ABC.com/yellow/下一站

我想得到

你好

黄色

这是我到目前为止:

select distinct substring(url, position('/' in url)+ 1) theURL from table;

我只能得到第一个“/”

我不知道如何获得第二个的位置

sql postgresql
3个回答
1
投票

一种方法使用regexp_split_to_array()

select (regexp_split_to_array(url, '/'::text))[2]

或者更好,因为@NeilMcGuigan建议:

select split_part(url, '/', 2)

0
投票

以下查询甚至可以用于像www.abc.com/hello这样的输入

SELECT DISTINCT (regexp_matches(url, '/([^/]+)'))[1] theURL
FROM table;

它也将跳过空条目


0
投票

遵循子字符串方法,并使用第一个子字符串结果进行第二次搜索:

select distinct substring(
  substring(url, position('/' in url)+ 1)
  , 0
  , position('/' in substring(url, position('/' in url)+ 1))) AS theURL 
from table;

本质上查询的作用是使用substring的原始结果来启动搜索下一个\,这样它就可以将文本保持在前两个之间

如果按字母顺序排序很重要,可以添加外部查询:

SELECT theURL FROM (
select distinct substring(
  substring(url, position('/' in url)+ 1)
  , 0
  , position('/' in substring(url, position('/' in url)+ 1))) AS theURL 
from table
) AS xt
ORDER BY xt.theURL;
© www.soinside.com 2019 - 2024. All rights reserved.