web-dev-qa-db-fra.com

Espace de coupe Oracle à l'intérieur d'une chaîne

Je stocke des numéros de téléphone en tant que VARCHAR2 dans mon système pour permettre aux utilisateurs de saisir des caractères "+" devant leur numéro de téléphone s'ils le souhaitent.

Mon expression rationnelle le permet parfaitement, mais lors du stockage du numéro dans la base de données, je veux supprimer tous les espaces que l'utilisateur peut entrer.

Mon expression régulière permet les formats suivants

+4470123456789
+447 0123456789
+447 01234 56789
01234567890
01234 567890
01234 567 890

Je sais que je pourrais résoudre mon problème en ne permettant pas aux utilisateurs de mettre des espaces dans leurs numéros, mais je sais par expérience personnelle à quel point il est frustrant d'avoir une erreur de validation en raison d'un formatage idiot du côté client. J'ai essayé d'utiliser la fonction TRIM sur mon déclencheur INSERT/UPDATE mais je me suis rendu compte que cela se limitait aux espaces blancs avant et arrière. Existe-t-il une autre fonction dans Oracle que je pourrais utiliser pour supprimer les espaces internes? Ou dois-je écrire ma propre fonction pour ce faire?

Tout pointeur serait grandement apprécié.

11
Alex

Vous voulez essayer replace (telno, ' ', '').

36
René Nyffenegger

une meilleure approche consiste à utiliser une expression régulière pour supprimer tous les espaces dans une chaîne

SQL> with t as (
    select 'AAA    BBB CCC' col from dual union
    select 'DDDD EEE     F' col from dual 
    )
    --
    -- actual query:
    --
    select regexp_replace(col, '[[:space:]]+', chr(32)) col
    from   t;

COL

AAA BBB CCC DDDD EEE F

0
Sarfraz Ahmed