PLSQL 提取单值



我想从链接中提取单个值:

Column1                                            
---------------
<a href=" https://link; m=date1>Link</a>  
<a href=" https://link; m=date2>Link</a>  

生成的列应如下所示:

Column1                                    Column2   
---------------
<a href=" https://link; m=date1>Link</a>     date1 
<a href=" https://link; m=date2>Link</a>     date2

尝试以下代码:

insert into B_TEST_TABLE values('<a href=" https://link; m=date1>Link</a>');
insert into B_TEST_TABLE values('<a href=" https://link; m=date2>Link</a>');
select COLUMN1, 
substr(COLUMN1, instr(COLUMN1, 'm=') +2 , instr(COLUMN1, '>') - (instr(COLUMN1, 'm=') + 2)) 
from B_TEST_TABLE;

尝试按如下方式regexp_substr

SQL> SELECT
2      REGEXP_SUBSTR('<a href=" https://link; m=date1>Link</a>', 'm=(.*?)>', 1, 1, NULL, 1)
3  FROM
4      DUAL;
REGEX
-----
date1
SQL>

干杯!!

假设每行给出一个目标"m=<value wanted>"模式的确切样本数据,您可以使用以下 REGEXP_REPLACE(( 示例:

with tbl(id, str) as (
select 1, '<a href=" https://link; m=date1>Link</a>' from dual union all  
select 2, '<a href=" https://link; m=date2>Link</a>' from dual union all
select 3, '<a href=" https://link; m=>Link</a>' from dual union all
select 4, NULL from dual
)
select id, regexp_replace(str, '.*m=(w+).*', '1') col1
from tbl; 

匹配行中任意位置的"m=",并将后面的一个或多个单词字符保存到记住的组中。 返回第一个记住的组。 请注意,如果未找到模式,将返回输入字符串。 您可以通过使组匹配零个或多个单词字符来使其返回 NULL(在第 3 行的情况下(:'.*m=(w*).*'. 仔细考虑在找不到匹配项时要返回的内容。

最新更新