REGEXP_REPLACE 和 REGEXP_EXTRACT
REGEXP_REPLACE and REGEXP_EXTRACT
我在日志中有一个 URI 列。我必须解析它并从中删除某些部分并将其存储在 table 中。例如,如果我有 /v7/cp/members/~PERF1SP826T90869AN/options
,那么我必须将其存储为 /v7/cp/members/*/options
。我可以使用 REGEXP_REPLACE 来做到这一点吗?
我还想看看是否可以将我从 URI 中删除的那部分存储为另一列?
例如 /v7/cp/members/~PERF1SP826T90869AN/options
,我应该将 /v7/cp/members/*/options
存储为一列,将 PERF1SP826T90869AN
存储在单独的列中。
如果您使用的是 Oracle,这里有一个方法:
SQL> with tbl(str) as (
select '/v7/cp/members/~PERF1SP826T90869AN/options' from dual
)
select regexp_replace(str, '(.*?)(/|$)', '*/', 1, 5) as replaced,
regexp_substr(str, '(.*?)(/|$)', 1, 5, NULL, 1) as fifth_element
from tbl;
REPLACED FIFTH_ELEMENT
------------------------ -------------------
/v7/cp/members/*/options ~PERF1SP826T90869AN
SQL>
我在日志中有一个 URI 列。我必须解析它并从中删除某些部分并将其存储在 table 中。例如,如果我有 /v7/cp/members/~PERF1SP826T90869AN/options
,那么我必须将其存储为 /v7/cp/members/*/options
。我可以使用 REGEXP_REPLACE 来做到这一点吗?
我还想看看是否可以将我从 URI 中删除的那部分存储为另一列?
例如 /v7/cp/members/~PERF1SP826T90869AN/options
,我应该将 /v7/cp/members/*/options
存储为一列,将 PERF1SP826T90869AN
存储在单独的列中。
如果您使用的是 Oracle,这里有一个方法:
SQL> with tbl(str) as (
select '/v7/cp/members/~PERF1SP826T90869AN/options' from dual
)
select regexp_replace(str, '(.*?)(/|$)', '*/', 1, 5) as replaced,
regexp_substr(str, '(.*?)(/|$)', 1, 5, NULL, 1) as fifth_element
from tbl;
REPLACED FIFTH_ELEMENT
------------------------ -------------------
/v7/cp/members/*/options ~PERF1SP826T90869AN
SQL>