Plusieurs fonction replace dans Oracle
Je suis en utilisant le REPLACE
fonction dans l'oracle de remplacer des valeurs dans ma chaîne;
SELECT REPLACE('THE NEW VALUE IS #VAL1#','#VAL1#','55') from dual
Donc c'est OK pour remplacer une valeur, mais qu'20+, dois-je utiliser 20+ REPLACE
fonction ou est-il une solution plus pratique.
Toutes les idées sont les bienvenues.
Vous devez vous connecter pour publier un commentaire.
Même si ce fil est vieux est le premier sur Google, donc je vais poster un Oracle équivalent à la fonction implémentée ici, à l'aide d'expressions régulières.
Est relativement plus rapide que remplacer imbriquée(), et beaucoup plus propre.
Pour remplacer des chaînes de caractères 'a','b','c' avec 'd' dans une colonne de type chaîne à partir d'une table donnée
Il n'est rien d'autre qu'une expression régulière pour plusieurs motifs statiques avec 'ou' opérateur.
Méfiez-vous des regexp de caractères spéciaux!
a
,b
ouc
avecd
, mais sans doute l'exigence est de remplacer chacune d'une valeur individuelle de permettre les chaînes à être construit à partir de modèles par exemple'No #VAL1# exists for this #VAL2#'
passant('vendor', 'cheese type')
. Convenu qu'il n'est pas particulièrement clair à partir de la question.REGEXP_REPLACE(column, '\x09|\x0A|\x0D','') as column
- c'est deux apostrophes à la fin..La accepté de répondre à comment remplacer plusieurs cordes en même temps dans Oracle suggère d'utiliser imbriquée
REPLACE
états, et je ne pense pas qu'il y est une meilleure façon.Si vous allez faire un usage intensif de cela, vous pourriez envisager d'écrire votre propre fonction:
et ensuite l'utiliser comme ceci:
Si tous vos jetons ont le même format (
'#VAL' || i || '#'
), vous pouvez omettre le paramètrein_old
et l'utilisation de votre boucle de contre à la place.RETURN VARCHAR2 DETERMINISTIC
pourrait être probablement plus rapide.Garder à l'esprit les conséquences
remplacera la 123 456, puis de trouver qu'il peut remplacer le 45, 89.
Pour une fonction qui a un résultat équivalent, il faudrait dupliquer la priorité (c'est à dire de remplacer les cordes dans le même ordre).
De même, en prenant une chaîne de caractères 'ABCDEF', et les instructions pour remplacer 'ABC' avec '123' et 'FAC' avec 'xyz' aurait encore de compte pour un ordre de priorité pour déterminer si elle est allée à "123EF" ou ABxyzF'.
En bref, il serait difficile de trouver quelque chose de générique qui serait plus simple qu'un remplacement imbriquées (bien que quelque chose qui était plus un sprintf style de fonction serait un complément utile).
C'est un vieux post, mais j'ai fini par utiliser Peter Lang, les pensées, et a un semblable, mais encore une approche différente. Voici ce que j'ai fait:
Alors je peux l'utiliser comme ceci:
Ce qu'il fait en sorte que je peux peut-personnage/chaîne avec tous les caractères de chaîne.
J'ai écrit un post à ce sujet sur mon blog.
Dans le cas où tous vos source et des chaînes de remplacement sont juste un caractère de long, vous pouvez tout simplement utiliser le
TRANSLATE
fonction:Voir la documentation Oracle pour plus de détails.
J'ai créé un général multi remplacez la chaîne Oracle de la fonction par une table de varchar2 comme paramètre.
Varchar sera remplacé pour le poste rownum valeur du tableau.
Par exemple:
Retourne:
Vous devez créer un type:
La finalité est:
Utilisation: