Oracle PLSQL - 仅在双引号之间替换特殊字符

问题描述 投票:0回答:1

你能帮忙吗?我需要替换特殊字符 chr(13) || chr(10) 在 clob 中带有空行,但仅当它位于双引号 chr(34) 之间时。有没有办法用 REGEXP_REPLACE 做到这一点?

谢谢你 安雅

oracle plsql regexp-replace
1个回答
0
投票

我需要替换特殊字符 chr(13) || chr(10) 在 clob 中带有空行,但仅限于双引号 chr(34) 之间。

如果您的意思是当它紧邻双引号之间时:

SELECT REPLACE(
         value,
         '"'||CHR(13)||CHR(10)||'"',
         '"'||CHR(13)||CHR(10)||CHR(13)||CHR(10)||'"'
       )
FROM   table_name;

如果您的意思是在此之前和之后的某处有引用:

SELECT CASE
       WHEN INSTR(value, '"', 1) < INSTR(value, '"', -1)
       THEN SUBSTR(
              value,
              1,
              INSTR(value, '"', 1)
            )
            || REPLACE(
              SUBSTR(
                value,
                INSTR(value, '"', 1) + 1,
                INSTR(value, '"', -1) - INSTR(value, '"', 1)
              ),
              CHR(13)||CHR(10),
              CHR(13)||CHR(10)||CHR(13)||CHR(10)
            )
            || SUBSTR(
              value,
              INSTR(value, '"', -1)
            )
       ELSE value
       END
FROM   table_name;

如果您想匹配左引号和右引号并且仅在它们之间进行替换,那么您不能使用简单的字符串函数(或正则表达式)来做到这一点,而应该编写一个适当的解析器(用 PL/SQL 或其他语言)来迭代字符串当前面的引号数量为奇数时,计算引号并替换 CR-LF。

© www.soinside.com 2019 - 2024. All rights reserved.