我正在尝试从包含换行符(NL)字符的表中选择一列(可能还有其他\n
,\r
,\t
)。我想使用REGEXP来选择数据并用空格替换(仅这三个)字符,“”。
答案 0 :(得分:21)
不需要正则表达式。这可以使用ASCII代码和枯燥的旧TRANSLATE()
轻松完成select translate(your_column, chr(10)||chr(11)||chr(13), ' ')
from your_table;
用空格替换换行符,制表符和回车符。
TRANSLATE()比其正则表达式更有效。但是,如果您的心脏设置在该方法上,您应该知道我们可以在正则表达式中引用ASCII代码。所以这个陈述是上面的正则表达式版本。
select regexp_replace(your_column, '([\x0A|\x0B|`\x0D])', ' ')
from your_table;
调整是以十六进制而不是以10为基础引用ASCII码。
答案 1 :(得分:0)
select translate(your_column, chr(10)||chr(11)||chr(13), ' ') from your_table;
清洁时,必须将非null值用作参数... (一旦1个参数为空,oracle函数基本上将返回null,很少有诸如replace-functions之类的例外)
select translate(your_column, ' '||chr(10)||chr(11)||chr(13), ' ') from your_table;
此示例使用''->''转换作为伪值来防止参数3中的空值