Oracle: remplacer les caractères non numériques dans une chaîne de caractères
j'ai un champ dans ma base de données où les utilisateurs ont enregistré des numéros de téléphone gratuits. En conséquence, les données ont toutes sortes de formatage différent:
- (région de) nnn-nnnn
- zone-nnn-nnnn
- zone.nnn.nnnn
- etc
j'aimerais supprimer tous les caractères non numériques et simplement stocker les chiffres, mais je ne peux pas trouver un moyen simple de le faire. Est-ce possible sans utiliser un remplacement pour chaque char?
2 réponses
Vous pouvez utiliser REGEXP_REPLACE depuis Oracle 10:
SELECT REGEXP_REPLACE('+34 (947) 123 456 ext. 2013', '[^0-9]+', '')
FROM DUAL
renvoie 349471234562013
.
les syntaxes alternatives comprennent:
classes de caractères POSIX:
'[^[:digit:]]+'
extensions influencées par Perl (depuis Oracle 11):
'\D+'
Pour les anciennes versions d'Oracle, qui ne prennent pas en charge les expressions régulières:
select translate (phone_no,'0'||translate (phone_no,'x0123456789','x'),'0')
from mytable;
L'intérieur translate
obtient tous les chiffres du numéro de téléphone, et l'extérieur translate
puis supprime le numéro de téléphone.