Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment puis-je remplacer les crochets par des tirets dans la fonction Oracle REGEXP_REPLACE ?

Pour remplacer les symboles, utilisez le TRANSLATE , elle sollicite moins le processeur que les fonctions d'expressions régulières :

SQL> SELECT translate ('(<FIO>)', '()[]', '----') replaced FROM dual;

REPLACED
--------
-<FIO>-

Les expressions régulières sont plus polyvalentes et peuvent faire des choses plus complexes mais sont plus chères. Dans ce cas, le remplacement d'un caractère par un autre se fait plus efficacement par une fonction spécialisée. Si vous voulez vraiment utiliser des expressions régulières, vous pouvez utiliser REGEXP_REPLACE :

SQL> SELECT regexp_replace ('[(<FIO>)]', '[]()[]', '-', 1, 0) reg FROM dual;

REG
---------
--<FIO>--

Mise à jour :si vous souhaitez remplacer uniquement le premier symbole, la traduction ne fonctionnera pas. À la place, utilisez :

SQL> SELECT regexp_replace ('[(<FIO>)]', '[]()[]', '-', 1, 1) reg FROM dual;

REG
---------
-(<FIO>)]