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