SQL用可变字符位置替换字符串

时间:2014-12-29 02:16:15

标签: sql oracle replace oracle11g

我正在使用Oracle 11.g。在发送之前,我必须在eMail clob中replace一个字符串。大字符串看起来像:

<p>
Text right before the HP image.</p>
<p>
<img alt="" src="data:image/jpeg;base64,//(a variable amount of encoded data)//"></p>
<p>
Text right after the image.</p>
<p>
&nbsp;</p>

之前的文本以及IMG标记之后的文本将具有可变长度。我想替换IMG代码中的大量文字:

<img alt="" src="data:image/jpeg;base64,//(a variable amount of encoded data)//">

始终如下文字:

<img src="cid:image.jpg" alt="This is a banner"/>

我使用INSTR查找IMG标记的开头和结尾,并将它们存储在局部变量中。我无法弄清楚如何替换那些可变位置。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您应该可以使用REGEXP_REPLACE()来完成此任务:

SELECT REGEXP_REPLACE(mytext, '<img alt="" src="data:image/jpeg;base64,[^"]*">', '<img src="cid:image.jpg" alt="This is a banner"/>', 'i') AS mynewtext
  FROM mytable

最好在发送代码中进行搜索和替换,而不是在查询本身中进行搜索和替换。