在两个字符串之间使用函数

时间:2014-01-24 03:54:34

标签: oracle oracle11g

希望你做得好。我正在寻找一些帮助。

我有一个包含Key_documents列的Share Points列表。此列包含许多嵌入到DIV和HTML标记中的HTML代码段,如下所示。对于某些字符串值,编码看起来不太好(这来自源系统)。我试图在查询输出中修复编码问题。

Key_Documents表中的数据

<a href="http://tarregsp01p/sites/Regulatory/NextDocs Document Library/VEGF Trap-Eye/Module 5 - Clinical/03 Study Reports/311523 (VIEW 2)/01 Study Report/311523-Report Body.pdf">Year 1 CSR</a></div>

所需输出

<a href="http://tarregsp01p/sites/Regulatory/NextDocs%20Document%20Library/VEGF%20Trap-Eye/Module%205%20-%20Clinical/03%20Study%20Reports/311523%20(VIEW%202)/01%20Study%20Report/311523-Report%20Body.pdf">Year 1 CSR</a></div>

请注意空格已编码为<{1}}以上

我正在尝试使用%20 e。这个问题是它编码了所有特殊字符,这反过来又破坏了我的HTML代码。

有任何帮助吗?从技术上讲,我想在utl_url.escap之后和之前的utl_url.escape之前使用href=函数

1 个答案:

答案 0 :(得分:0)

select 
  id, 
  listagg(case mod(n,2) when 0 then utl_url.escape(substring) else substring end)
    within group (order by n) string
from
(
  select 
    id,
    n,
    regexp_substr(string, '(.*?)'||chr(1), 1, n, '', 1) as substring
  from 
    (select id, 
       regexp_replace(string, '(href=")(.*?)"', 
       '\1'||chr(1)||'\2'||chr(1)||'"')||chr(1) string 
     from your_table), 
    (select level n from dual connect by level < 999)
  where 
   regexp_substr(string, '(.*?)'||chr(1), 1, n, '', 1) is not null
)
group by id
order by id

fiddle