我试图在postgreSQL中获取像这样的URL之间的字符:
呜呜呜.ABC.com/hello/下一站
呜呜呜.ABC.com/Hi/贫穷人
呜呜呜.ABC.com/yellow/下一站
我想得到
你好
嗨
黄色
这是我到目前为止:
select distinct substring(url, position('/' in url)+ 1) theURL from table;
我只能得到第一个“/”
我不知道如何获得第二个的位置
一种方法使用regexp_split_to_array()
:
select (regexp_split_to_array(url, '/'::text))[2]
或者更好,因为@NeilMcGuigan建议:
select split_part(url, '/', 2)
以下查询甚至可以用于像www.abc.com/hello
这样的输入
SELECT DISTINCT (regexp_matches(url, '/([^/]+)'))[1] theURL
FROM table;
它也将跳过空条目
遵循子字符串方法,并使用第一个子字符串结果进行第二次搜索:
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;