我的项目中有一个要求,我需要拆分url并从中提取变量,url是其中一个表中的列。网址看起来像这样
输入行
"http://example.com/wps/myportal/example/viewer?mstrContentType=Report& mstrId=15F4AC9C4453E5F75456438F732F7B8C&contentName=7.++CTI+Session+Order+Counts&proj=System+Xr+-+DMDR/CW&workspaceName=&woId=&vendorId=Microstrategy"
我需要o / p如下与目标列进行比较,如下所示
ContentType=Report
mstrId=15F4AC9C4453E5F75456438F732F7B8C
contentName=7.++CTI+Session+Order+Counts
etc...
我只能使用Oracle,不应该使用程序设计语言。
感谢。
答案 0 :(得分:1)
这里只需要使用REGEXP_SUBSTR,如下所示。
create table test1(col1 varchar2(4000));
insert into test1 values(
'http://example.com/wps/myportal/example/viewer?mstrContentType=Report& mstrId=15F4AC9C4453E5F75456438F732F7B8C&contentName=7.++CTI+Session+Order+Counts&proj=System+Xr+-+DMDR/CW&workspaceName=&woId=&vendorId=Microstrategy'
);
select regexp_substr(col1,'[^?"]+',1,2) ss from test1;
select trim(regexp_substr(regexp_substr(col1,'[^?"]+',1,2),'[^&]+', 1, level)) as output_data from test1
connect by regexp_substr(regexp_substr(col1,'[^?"]+',1,2), '[^&]+', 1, level) is not null;
<强> OUTPUT_DATA 强>
mstrContentType=Report
mstrId=15F4AC9C4453E5F75456438F732F7B8C
contentName=7.++CTI+Session+Order+Counts
proj=System+Xr+-+DMDR/CW
workspaceName=
woId=
vendorId=Microstrategy
答案 1 :(得分:0)
如果您的网址字符串采用可预测的格式,您可以使用regexp_replace
捕获网址的匹配部分select regexp_replace(
regexp_substr(url, '[?&]mstrContentType=([^&]*)')
'[^=]*=(.*)'
'\1'
)
这将返回mstrContentType
参数的值 - 等号右边但在下一个参数之前的子字符串。