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.
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:]]*','');
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))
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
select regexp_replace('This is a test ' || chr(9) || ' foo ', '[[:space:]]', '') from dual;
REGEXP_REPLACE
--------------
Thisisatestfoo
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 '% %'
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,}', ' ' )