IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

[PL/SQL] Supprimer les caractères non numériques


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 65
    Points : 73
    Points
    73
    Par défaut [PL/SQL] Supprimer les caractères non numériques
    Bonjour,

    J'ai une chaine de caractères qui est un peu batarde. Je devrais avoir du numérique mais j'ai une chaine de caractères qui peut prendre différentes forme "1,321 kg" ou "1321 kilos" ou d'autres choses.
    On m'a demandé de ne récupérer que les numériques dans cette chaine. Par contre je ne vois pas comment y arriver en PL/SQL.
    Quelqu'un pourrait m'éclairer sur une fonction à utiliser ou en me proposant un bout de code ?

    Merci.

  2. #2
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Bonjour,


    Je pense que la fonction TRANSLATE t'aidera : http://oracle.developpez.com/faq/?page=11#translate


    Laly.

  3. #3
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Sinon, vous pouvez vous écrire une procédure qui parcours la chaine caractère par caractère.
    Si le caractère courant est un chiffre ou la virgule, vous le gardez.

    en sortie, vous aurez donc uniquement des chiffres et une virgule. :-)

  4. #4
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Bonjour Leo,


    Pour ma part quand il existe une fonction Oracle "native" qui fait le travail, je l'utilise, c'est plus simple et sans doute plus performant que de coder la sienne propre...


    Laly.

  5. #5
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Exemple Possible de Fonction Qui Ramene Tous Les chiffres d'une chaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    create or replace function to_chiffre
    --      DESCRIPTION     : Fonction to_chiffre permet de renvoyer le Nombre
    --                        Correspondant a  la chaine de Caractere
    --                        passee en Parametre
    --                        Ex : 'Rue No 4'  ==> 4
    --      PARAMETRES :
    --                     E:   - Chaine
    --                     S:   - Entier
       (
       V_Chaine in varchar2
       )
       return number authid current_user is
    j number;
    chiffre number;
    Begin
       j := 0;
       chiffre := 0;
       for i in Reverse 1..length(V_chaine)
       loop
          if substr(V_chaine,i,1) >= '0' and
             substr(V_chaine,i,1) <= '9' Then
             chiffre := chiffre + to_number(substr(V_chaine,i,1)) * power(10,j);
             j := j + 1;
          End If;
       End Loop;
       Return(chiffre);
       Exception When Value_error Then return(0);
    End;
    /
    show errors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select to_chiffre(' 1,256Kilo) from dual; ==> 1256
    Select to_chiffre('1256 Kg') from dual;  ==> 1256

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Points : 5
    Points
    5
    Par défaut A partir d'Oracle 10g
    J'ai eu le même besoin mais avec des contraintes de suppression de tous les caractères non numériques et éviter la lourdeur d'un ajout de fonction.

    J'ai trouvé la fonction ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT REGEXP_REPLACE('1,321 kg', '\D+', '')
    FROM DUAL;
    Pour les personnes qui repasseraient par ce post.

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 80
    Points : 68
    Points
    68
    Par défaut
    merci rabslim

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. enlever les caractères non numériques
    Par Issam dans le forum SQL
    Réponses: 2
    Dernier message: 06/02/2015, 17h07
  2. Supprimer les caractères non unicode
    Par Ceubex dans le forum Général Java
    Réponses: 2
    Dernier message: 04/02/2014, 10h28
  3. [RegEx] Supprimer les caractères non alpha numérique
    Par Opsse dans le forum Langage
    Réponses: 4
    Dernier message: 12/05/2013, 22h00
  4. Réponses: 2
    Dernier message: 18/04/2012, 10h56
  5. [SQL-2005] Rechercher des caractères non numériques
    Par castaka dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/05/2007, 12h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo