Oracle Regexp для замены \n,\r и\t с пространством

Я пытаюсь выбрать столбец из таблицы, содержащей символы новой строки (NL) (и, возможно, другие \n, \r, \t). Я хотел бы использовать REGEXP для выбора данных и замены (только этих трех) символов пробелом "".

Ответ 1

Нет необходимости в регулярном выражении. Это можно легко сделать с помощью кодов 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;

Тонкая настройка - это ссылка на код ASCII в шестнадцатеричном формате, а не на базовую 10.