Я пытаюсь выбрать столбец из таблицы, содержащей символы новой строки (NL) (и, возможно, другие \n
, \r
, \t
). Я хотел бы использовать REGEXP для выбора данных и замены (только этих трех) символов пробелом "".
Oracle Regexp для замены \n,\r и\t с пространством
Ответ 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.