21

我正在尝试从包含换行符 (NL) 字符(可能还有其他\n, \r, \t)的表中选择一列。我想使用 REGEXP 选择数据并用空格“”替换(仅这三个)字符。

4

2 回答 2

34

不需要正则表达式。这可以通过 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 代码。

于 2013-05-06T21:09:43.203 回答
1

select translate(your_column, chr(10)||chr(11)||chr(13), ' ') from your_table;

要清理,必须将非空值作为参数提供......(一旦 1 个参数为空,oracle 函数基本上将返回空,很少有像替换函数这样的异常)

select translate(your_column, ' '||chr(10)||chr(11)||chr(13), ' ') from your_table;

此示例使用 ''->'' 翻译作为虚拟值,以防止参数 3 中出现 Null-Value

于 2020-10-29T16:23:34.553 回答