oracle находит и добавляет префикс и суффикс к подстроке в столбце varchar2 - PullRequest
0 голосов
/ 28 мая 2018

Мы хотим найти и добавить другой префикс и суффикс к подстроке в столбце varchar2. Я предоставил пример строки. Я хочу найти и добавить префикс и суффикс к подстроке

"<ac:structured-macro ac:name="toc">this is atable of content macro</ac:structured-macro>"

и измените его на

<ac:structured-macro ac:name="scroll-ignore" ><ac:structured-macro ac:name="toc">this is atable of content macro</ac:structured-macro></ac:structured-macro>

пример строки столбца: "{toc: outline = true | printable = false}

<ac:structured-macro ac:name="toc">this is a table of content macro</ac:structured-macro>

Просмотр результатов позволяет клиницисту просматривать результаты лабораторных, рентгенологических и показателей жизненно важных функций в контексте пациента. Это позволяет клиницисту получать самые последние результаты, доступные для его пациента. "

Я пытался использовать регулярное выражение, ноне мог сделать это в одном запросе

update bodycontent set body=REGEXP_REPLACE(body, '(<ac:structured-macro ac:name="toc">)', '<ac:structured-macro ac:name="scroll-ignore"> <ac:structured-macro ac:name="toc">') where contentid=716785

update bodycontent set body=REGEXP_REPLACE(body, '(<\/ac:structured-macro>)', '</ac:structured-macro></ac:structured-macro>',1,1) where contentid=716785

1 Ответ

0 голосов
/ 28 мая 2018

Ваш вопрос легче понять, если вы немного упростите свои примеры:

CREATE TABLE bodycontent (body VARCHAR2(2000 CHAR));
INSERT INTO bodycontent VALUES ('<foo>text</foo>');
SELECT * FROM bodycontent;
<foo>text</foo> 

UPDATE bodycontent SET body = REGEXP_REPLACE(body, 
    '(<foo>.*</foo>)', 
    '<bar>\1</bar>');

SELECT * FROM bodycontent;
<bar><foo>text</foo></bar>

Это нормально?Если это так, ваши реальные данные будут выглядеть так:

INSERT INTO bodycontent VALUES (
   '<ac:structured-macro ac:name="toc">'||
   'this is atable of content macro</ac:structured-macro>');


UPDATE bodycontent SET body = REGEXP_REPLACE(body, 
    '(<ac:structured-macro ac:name="toc">.*</ac:structured-macro>)', 
     '<ac:structured-macro ac:name="scroll-ignore">\1</ac:structured-macro>');

SELECT * FROM bodycontent;
<ac:structured-macro ac:name="scroll-ignore">
   <ac:structured-macro ac:name="toc">
     this is atable of content macro
   </ac:structured-macro>
</ac:structured-macro>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...