【发布时间】:2020-08-06 16:45:50
【问题描述】:
我有以下 SQL 查询 (Oracle 18c):
SELECT
--FIRST
translate(
' sOmE tEsT
eNdOfLiNe',
chr(10)||chr(11)||chr(13), 'replText'
) "Result1",
--SECOND
regexp_replace(
' sOmE tEsT
eNdOfLiNe',
'[\x0A|\x0B|`\x0D]', 'replText'
) "Result2",
--THIRD
regexp_replace(
' sOmE tEsT
eNdOfLiNe',
'[\r\n\t]', 'replText', 1, 0
) "Result3"
FROM dual
我想做的是用新字符串替换所有选项卡、回车符和换行符,但似乎正则表达式替换不起作用(返回初始文本)。对于格式化,我真的很抱歉,但我需要使用\r \n \t 混合字符处理上述格式的文本。
这里是小提琴:https://dbfiddle.uk/?rdbms=oracle_18&fiddle=63834f9bcab93136635366f18c375b13
我现在正在学习 Oracle,但不明白为什么第二个和第三个解决方案会返回初始文本。第一个解决方案似乎有效,但我想在SECOND 和THIRD 解决方案中达到相同的效果。我错过了什么?
【问题讨论】:
-
如果 REGEXP_REPLACE() 未能将正则表达式与输入字符串匹配,则返回输入字符串。请注意,这与 REGEXP_SUBSTR() 不同,如果未找到匹配项,则返回 NULL。
标签: oracle