Chaines Oracles : remplacer des espaces multiples par des espaces simples

chaine texte avec espaces en trop

Supprimer les blancs inutiles dans une chaine

Dans un article précédent, j’expliquais comment remplacer plusieurs caractères en même temps dans une chaine avec la fonction regexp_replace.

Lorsqu’on récupère des champs textes saisis par des utilisateurs, il est souvent utile de supprimer les blancs inutiles qui se trouvent dans le texte. Il est difficilement envisageable de faire des boucles dans un PL/SQL ou un autre traitement pour remplacer ces blancs de la façons la plus efficace possible.
Voici une manière efficace pour supprimer ces caractères sous Oracle.

1) supprimer tous les blancs

Pour supprimer tous les blancs, il suffit avec la fonction replace de remplacer un blanc (‘ ‘) par rien du tout ( ») :
select REPLACE(' Ceci est  un test  avec des   espaces en  trop ', ' ', '') TXT from dual;

On peut faire la même chose de manière un peu moins intuitive avec la fonction REGEXP_REPLACE (fonction qui remplace toutes les occurrences d’une expression régulière par une autre expression régulière).
Comme expression régulière à remplacer on va utiliser (avec les crochets) :
[:blank:]     Tout caractère « espace »
ou [:space:]     Tout caractère « espace » y compris des caractères « non-imprimés »

à priori il vaut mieux utiliser le [:space:]  qui a l’air de prendre plus de sortes de caractères espace, ce qui nous donne :

select REGEXP_REPLACE(' Ceci est  un test  avec des   espaces en  trop ', '[[:space:]]', '') TXT from dual;

Qui nous donnera le résultat suivant :

« Ceciestuntestavecdesespacesentrop« 
 

2) remplacer les espaces multiples par des espaces simples

Comme on le voit dans le résultat précédent, ce dont on a besoin le plus fréquemment n’est pas de supprimer tous les espaces, mais d’enlever les espaces en trop en début, en fin et au milieu de la chaine.

On va utiliser :

  • la fonction trim pour enlever les blancs en début et en fin de chaine
  • REGEXP_REPLACE en remplaçant 2 ou plus {2,} blancs ( ) par un seul blanc ‘ ‘.
SELECT TRIM(
REGEXP_REPLACE(' Ceci est  un test  avec des   espaces en  trop ', 
'( ){2,}', ' ') 
)
TXT FROM dual;

Ce qui donne :

« Ceci est un test avec des espaces en trop »

En remplaçant le texte et dual par la colonne et la table qu’on souhaite traiter, on supprimera ainsi tous les blanc malheureusement saisis.

[wysija_form id= »2″]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *