web-dev-qa-db-fra.com

Oracle Regexp pour remplacer \ n, \ r et \ t par un espace

J'essaie de sélectionner une colonne d'une table qui contient des caractères de nouvelle ligne (NL) (et éventuellement d'autres \n, \r, \t). Je voudrais utiliser le REGEXP pour sélectionner les données et remplacer (seulement ces trois) caractères par un espace, "".

17
Tuti Singh

Pas besoin de regex. Cela peut être fait facilement avec les codes ASCII et vieux ennuyeux TRANSLATE ()

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

Cela remplace le retour à la ligne, la tabulation et le retour chariot par un espace.


TRANSLATE () est beaucoup plus efficace que son équivalent regex. Cependant, si votre cœur est attaché à cette approche, vous devez savoir que nous pouvons référencer les codes ASCII en regex. Cette déclaration est donc la version regex de ce qui précède.

select regexp_replace(your_column,  '([\x0A|\x0B|`\x0D])', ' ')
from your_table;

Le Tweak doit faire référence au code ASCII en hexadécimal plutôt qu'en base 10.

26
APC