我在一个字段(URL_FIELD
)中有一个包含完整网址的表格,我想提取网址的路径段。以下是一个URL(表中的一个单元格)的示例:
https://www1.ncdc.noaa.gov/pub/data/test/paleocean/sediment_files/complete/nantuck-tab.txt
我想要的部分是/pub/data/test/paleocean/sediment_files/complete/
。
到目前为止,我有:
SELECT SUBSTR(URL_FIELD, INSTR(URL_FIELD, '/pub', -1)) AS PATH_NAME FROM EG_VAR_UPLOAD_TEST;
返回
/pub/data/test/paleocean/sediment_files/complete/nantuck-tab.txt
所以我需要在最后的正斜杠(nantuck-tab.txt
)之后删除该部分。我认为将当前SUBSTR()
函数嵌套到另一个SUBSTR()
函数中可以解决这个问题,尽管我一直对所有嵌套参数感到困惑。请记住每个URL的最终正斜杠后面的部分,/pub
之前的部分(有时)也是如此。
答案 0 :(得分:1)
使用REGEX_SUBSTR
您可以尝试如下:
我假设only final forward slash varies for each URL and so does the section preceding /pub
SELECT REGEXP_SUBSTR (URL_FIELD, '/pub.*/') AS PATH_NAME
FROM EG_VAR_UPLOAD_TEST;
见demo:
SQL> SELECT REGEXP_SUBSTR (
'https://www1.ncdc.noaa.gov/pub/data/test/palaeocean/sedimeant_files/complete/nantuck-tab.txt'
,'/pub.*/')
AS PATH_NAME
FROM DUAL
/
PATH_NAME
--------------------------------------------------
/pub/data/test/palaeocean/sedimeant_files/complete
SQL> SELECT REGEXP_SUBSTR (
'https://www1.ncdc.noaa.gov/pub/datttta/test/palaeocean/sedimeant_files/complete/nanttttuck-tab.txt'
,'/pub.*/')
AS PATH_NAME
FROM DUAL
/
PATH_NAME
-----------------------------------------------------
/pub/datttta/test/palaeocean/sedimeant_files/complete
SQL>
答案 1 :(得分:1)
select regexp_substr('https://www1.ncdc.noaa.gov/pub/data/test/paleocean/sediment_files/complete/nantuck-tab.txt', '^https?://[^/]+(.*/)[^/]+$', 1, 1, null, 1)
from dual;
正则表达式的解释:
^http
在开始时匹配“http”s?
与“https”中的可选“s”匹配,://
与“http”/“https”[^/]+
匹配“://”,.*/
匹配以“/”结尾的任意数量的任意字符,而围绕它的括号将其标记为“subexpression#1”,[^/]+$
匹配任意匹配任意数字的非 - “/”字符。然后,regexp_substr()
函数的后续参数是:
1
是“从位置1开始”,1
是“首次出现正则表达式”,null
是“没有正则表达式处理的修饰符”,1
是“返回子表达式#1”,它指的是实际正则表达式中定义的子表达式#1(见上文)。