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

Oracle Discussion :

recuperer champ number dans une chaine


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 114
    Par défaut recuperer champ number dans une chaine
    bonjour,
    voila je vous explique mon problème, je dois créer une petite procédure qui va analyser mes log.
    Pour cela, je dois récupérer un champ ident (numbe)r qui est present dans le message log.
    Cet ident selon les messages se trouvent à différentes positions dans la chaine.
    J'essaie de savoir si il existe des fonctions capable de connaitre la position et la longueur d'un nombre au sein d'une chaine de caractère (par exemple 4455 ds la chaine 'stop erreur client 4455 ne possedepas ....') afin de l'extraire.
    Merci pour votre aide

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Oui, mais tout dépend de la composition de la chaine.
    S'il n'y a qu'un seul nombre (et pas plusieurs disséminés dans la chaine), un double translate fera l'affaire.
    1er translate pour enlever tous les chiffres, et le second appliqué au résultat pour enlever tous les non-chiffres

    Ca doit ressembler à quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TRANSLATE(v_chaine, '0' ||TRANSLATE(v_chaine, 'a0123456789','a'), '0')
    Seul souci, si jamais tu as "coucou 123 il est 12h30 !", ça renverra 1231230

    On peut vérifier autrement en L/Rtrim-ant les non-chiffres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RTRIM(LTRIM(v_chaine, TRANSLATE(v_chaine, 'a0123456789', 'a')), TRANSLATE(v_chaine, 'a0123456789', 'a'))
    Qui renverra la souschaine commençant au premier chiffre et finissant au dernier. On peut ensuite vérifier que cette souschaine ne contient que des chiffres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LTRIM(souschaine, '0123456789') IS NULL AND souschaine IS NOT NULL

  3. #3
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 114
    Par défaut
    merci pour la réponse.
    par contre je pense qu'il y aura plusieurs nombres dans cette chaine et du coup il faudra en effet que je récupère le premier.
    merci

  4. #4
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 114
    Par défaut
    pas d'idée pour récupérer uniquement le premier nombre d'une chaine composée de plusieurs nombres.
    merci

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Je te donne la façon de faire, à toi de coder maintenant
    Avec la 2nde méthode utilisant R et LTRIM (tu n'as besoin que du ltrim), tu obtiens la souschaine à partir du premier nombre.
    Avec cette souschaine, tu peux éliminer les premiers chiffres, et avec la différence de taille de chaine, tu peux donc trouver où s'arrête le premier nombre.
    Il ne reste plus qu'à faire un substr pour récupérer ce premier nombre.

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> Select regexp_substr('stop erreur client 4455 ne possedepas', '[[:digit:]]+')
      2    from dual
      3  /
     
    REGEXP_SUBSTR('STOPERREURCLIEN
    ------------------------------
    4455
     
    SQL>

Discussions similaires

  1. recuperer les chiffres dans une chaine
    Par grospatapouf dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 22/01/2009, 00h08
  2. [RegEx] Récupération de valeurs dans une chaine de caractères
    Par Seth77 dans le forum Langage
    Réponses: 1
    Dernier message: 09/08/2007, 09h39
  3. Réponses: 3
    Dernier message: 01/03/2007, 15h24
  4. Comment récupérer un chiffre dans une chaîne ?
    Par kenny49 dans le forum Langage
    Réponses: 1
    Dernier message: 16/08/2006, 14h52
  5. recuperer certains temes dans une chaine de caractere
    Par leviathan516 dans le forum ASP
    Réponses: 2
    Dernier message: 15/10/2004, 10h42

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