PLSQL提取单值

时间:2019-10-08 14:26:52

标签: sql oracle url-parsing

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

    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

3 个答案:

答案 0 :(得分:0)

尝试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>

干杯!

答案 1 :(得分:0)

尝试以下代码:

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;

答案 2 :(得分:0)

假设每行有一个目标"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*).*'。如果找不到匹配项,请仔细考虑要返回的内容。