PLSQL извлекает значение синглов - PullRequest
0 голосов
/ 08 октября 2019

Я хочу извлечь отдельные значения из ссылок:

    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 голосов
/ 08 октября 2019

Попробуйте следующий код:

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;
0 голосов
/ 08 октября 2019

Предполагая, что точные данные выборки приведены с одним целевым шаблоном "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*).*'. Тщательно продумайте, что вы хотите вернуть, если совпадение не найдено.

0 голосов
/ 08 октября 2019

Попробуйте 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>

Ура !!

...