Oracle PL / SQL: supprimer "space characters" d'une chaîne de caractères

dans ma base de données Oracle 10g, j'aimerais supprimer "space characters" (espaces, onglets, retour de chariot)...) à partir des valeurs d'un champ de table.

TRANSLATE() le chemin à parcourir ? Par exemple quelque chose comme:

MY_VALUE := TRANSLATE(MY_VALUE,
  CHR(9) || CHR(10) || CHR(11) || CHR(12) || CHR(13) || ' ', '');

Ou est-il une meilleure alternative (quelque chose comme [:space:] en PHP PCRE)?

Merci pour tout conseil.

19
demandé sur Justin Cave 2011-04-01 00:23:20

6 réponses

j'opterais pour regexp_replace, bien que je ne sois pas sûr à 100% que ce soit utilisable en PL/SQL

my_value := regexp_replace(my_value, '[[:space:]]*',''); 
36
répondu a_horse_with_no_name 2011-03-31 20:30:20

version plus Courte de:

REGEXP_REPLACE( my_value, '[[:space:]]', '' )

:

REGEXP_REPLACE( my_value, '\s')

aucun des énoncés ci-dessus ne supprimera les caractères "null".

Pour supprimer les "nuls" de la recouvrir de la déclaration avec un remplacer

Comme ceci:

REPLACE(REGEXP_REPLACE( my_value, '\s'), CHR(0))
12
répondu Lord Gordoff 2013-07-16 18:07:55

puisque vous êtes à l'aise avec les expressions régulières, vous voulez probablement utiliser la fonction REGEXP_REPLACE. Si vous voulez éliminer tout ce qui correspond à la classe [: space:] POSIX

REGEXP_REPLACE( my_value, '[[:space:]]', '' )


SQL> ed
Wrote file afiedt.buf

  1  select '|' ||
  2         regexp_replace( 'foo ' || chr(9), '[[:space:]]', '' ) ||
  3         '|'
  4*   from dual
SQL> /

'|'||
-----
|foo|

si vous voulez laisser un espace en place pour chaque jeu de caractères d'espace continu, ajoutez simplement le + pour l'expression régulière et utiliser un espace comme caractère de remplacement.

with x as (
  select 'abc 123  234     5' str
    from dual
)
select regexp_replace( str, '[[:space:]]+', ' ' )
  from x
7
répondu Justin Cave 2016-06-07 22:21:12
select regexp_replace('This is a test   ' || chr(9) || ' foo ', '[[:space:]]', '') from dual;

REGEXP_REPLACE
--------------
Thisisatestfoo
2
répondu ggiroux 2011-03-31 20:38:34

Pour supprimer tous les espaces, vous pouvez utiliser:

myValue := replace(replace(replace(replace(replace(replace(myValue, chr(32)), chr(9)),  chr(10)), chr(11)), chr(12)), chr(13));

Exemple: supprimer tous les espaces dans un tableau:

update myTable t
    set t.myValue = replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13))
where
    length(t.myValue) > length(replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13)));

ou

update myTable t
    set t.myValue = replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13))
where
    t.myValue like '% %'
1
répondu Mirko 2011-11-08 13:28:06

Pour remplacer un ou plusieurs caractères espace par un espace simple, vous devez utiliser {2,} au lieu de *, sinon vous ne seriez insert un blanc entre tous les caractères non blancs.

REGEXP_REPLACE( my_value, '[[:space:]]{2,}', ' ' )
0
répondu Marc Martens 2015-10-20 14:43:43