String 在PLSQL中提取URL路径段字符串
我有一个在一个字段(String 在PLSQL中提取URL路径段字符串,string,plsql,oracle-sqldeveloper,String,Plsql,Oracle Sqldeveloper,我有一个在一个字段(URL\u field)中包含完整URL的表,我想提取URL的路径段。下面是一个URL示例(表中的一个单元格): 我想要的部分是/pub/data/test/paleocean/deposition\u files/complete/ 到目前为止,我已经: SELECT SUBSTR(URL_FIELD, INSTR(URL_FIELD, '/pub', -1)) AS PATH_NAME FROM EG_VAR_UPLOAD_TEST; 返回 /pub/data/test
URL\u field
)中包含完整URL的表,我想提取URL的路径段。下面是一个URL示例(表中的一个单元格):
我想要的部分是/pub/data/test/paleocean/deposition\u 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
前面的部分也不相同(有时)。使用REGEX\u SUBSTR
可以尝试以下操作:
我假设每个URL只有最后的正斜杠不同,/pub
SELECT REGEXP_SUBSTR (URL_FIELD, '/pub.*/') AS PATH_NAME
FROM EG_VAR_UPLOAD_TEST;
请参见演示:
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>
regexp的解释:
与开头的“http”匹配^http
匹配“https”中的可选“s”s?
与“http”/“https”后面的“://”匹配://
匹配“://”后面的任意数字非“/”字符[^/]+
匹配任意数量以“/”结尾的任意字符,而其周围的括号将其标记为“子表达式#1”*/
匹配结尾处的任意数字非“/”字符[^/]+$
regexp\u substr()
函数的后续参数是:
是“从位置1开始”1
是“第一次出现regexp”1
是“对regexp处理没有修改器”null
是“返回子表达式#1”,它指的是在实际regexp中定义的子表达式#1(见上文)1
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>
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;