Remplacement multiple dans une chaine et séquence d’échappement dans DataStudio
Problèmatique : Je souhaite lire avec une requête SQL Oracle une chaine de caractère (en l’occurence un JSON) en enlevant tous les caractères suivants : { } et « , puis l’intégrer dans un traitement DataStudio.
Solution :
Sur Oracle, je vais utiliser la fonction de regexp_replace qui est équivalent à la fonction replace et qui permet en plus d’utiliser des expressions régulières.
I – remplacement multiple dans une chaine Oracle
select regexp_replace('{"client":"0","caracteristiques":{"particulier":"1","entreprise":"0","multiple":"0","nouveau":"0","reprise"}}', '{|}|"', '') chaine from dual;
3 paramètres :
param1 : la chaine à traiter
‘{|}| »‘ : les caractères à remplacer entre » et séparés par des |
» : le caractère de remplacement, ici on ne remplace par rien pour supprimer
II – séquence d’échappement dans l’ETL DataStudio
En intégrant cette fonction dans un job de l’ETL DataStudio, je me rends compte que ça bloque sur le » dans le 2ème partie du regexp_replace.
En effet le » est interprété par l’éditeur de DataStudio avant l’interprétation dans une chaine de caractère Oracle. Pour pouvoir inclure le » dans la chaine qu’on recherche, il faut :
- Activer l’interprétation des séquences d’échappement dans les chaînes de caractères.
- Utiliser le caractère d’échappement qui est le ‘\’.
Ce qui nous donne le code suivant pour les traitements dans l’ETL Datastudio :
// option (désactivée par défaut) pour activer l'interprétation des séquences d'échappement dans les chaînes de caractères.
Option("ESCAPE","True");
select regexp_replace('{"client":"0","caracteristiques":{"particulier":"1","entreprise":"0","multiple":"0","nouveau":"0","reprise"}}',
'{|}|\"',
'')
chaine from dual;
Message(%chaine%);
Option("ESCAPE","False");
voir aussi :
Oracle – un like multiple
Oracle – insérer des chaines contenant des apostrophes
ETL : 10 raisons de choisir DataStudio
[wysija_form id= »2″]