替换Oracle中的特殊字符

时间:2015-12-10 09:14:11

标签: oracle

我要求更换'&'在其中一个表格列中,在插入时未编码。

我用以下查询尝试了它,

select regexp_replace('hello & hai & " ''
       ,'&[^((amp;)|(quot;)|(apos;))]','&') as decodedval 
from dual;

正在转换非编码'&'正如所料,但删除'&'之间的空间和'海'。请问有谁能告诉我我在做什么?

1 个答案:

答案 0 :(得分:0)

解码所有内容,然后重新编码字符串:

SQL Fiddle

Oracle 11g R2架构设置

查询1

SELECT DBMS_XMLGEN.CONVERT(
         DBMS_XMLGEN.CONVERT(
           'hello & hai & " '',
           1
         ),
         0
       ) AS decodeval
FROM   DUAL

<强> Results

|                           DECODEVAL |
|-------------------------------------|
| hello &amp; hai &amp; &quot; &apos; |

查询2 - 更新以保留周围标记

SELECT  REGEXP_REPLACE(
          REGEXP_REPLACE(
            DBMS_XMLGEN.CONVERT(
              DBMS_XMLGEN.CONVERT(
                '<tag>hello & hai &amp; &quot; &apos;</tag>',
                1
              ),
              0
            ),
            '^&lt;(.*?)&gt;',
            '<\1>'
          ),
          '&lt;(/.*?)&gt;$',
          '<\1>'
        ) AS decodeval
FROM   DUAL

<强> Results

|                                      DECODEVAL |
|------------------------------------------------|
| <tag>hello &amp; hai &amp; &quot; &apos;</tag> |