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 :

Extraction caractère en commençant par la droite


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    Par défaut Extraction caractère en commençant par la droite
    Bonjour à tous.

    Je souhaite faire une extraction sur une chaine de caractères :

    Ma chaine de caractères contient plusieurs points :

    123DC76.3664GDTE.2ZSD.4ESZ2
    12ZSE34.12Z.SZ34.32ZSEZ32.32ZSE45

    Mon but est d’extraire (dans des variables par exemple) les caractères qui se trouvent après le dernier point puis les caractères qui se trouvent entre l’avant dernier point et le dernier point puis dans un dernier temps tous les caractères qui se trouvent avant l’avant dernier point.

    J’espère avoir été claire, merci pour votre aide.

  2. #2
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    je ne pense pas qu'elle est possible en sql, il te faut une procedure.
    mais en general, pour extraire des caracteres de droite à gauche voici la fonction selon le SGBD utilisé.

    fonction_de_extraction(la_chaine,longueur(la_chaine)-N,longueur_(la_chaine))

  3. #3
    Membre actif
    Inscrit en
    Décembre 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 34
    Par défaut
    Citation Envoyé par boussafi Voir le message
    je ne pense pas qu'elle est possible en sql, il te faut une procedure.
    bah si, s'il est sous Oracle, avec les fonctions SUBSTR et INSTR
    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
     
    SQL> select substr('aaa.bbbb.ccc',INSTR('aaa.bbbb.ccc','.',-1)+1) from dual; 
     
    SUB
    ---
    ccc
     
    SQL> select substr(substr('aaa.bbbb.ccc',INSTR('aaa.bbbb.ccc','.')+1),1,(INSTR(substr('aaa.bbbb.ccc',INSTR('aaa.bbbb.ccc','.')+1),'.',-1)-1)) from dual; 
     
    SUB
    ----
    bbbb
     
    SQL> select substr('aaa.bbbb.ccc',1,INSTR('aaa.bbbb.ccc','.',-1,2)-1) from dual;
     
    SUB
    ---
    aaa

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Autre petite variante pour la partie intermédiaire ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with test as
        (select '123DC76.3664GDTE.2ZSD.4ESZ2' val from dual
        union
        select '12ZSE34.12Z.SZ34.32ZSEZ32.32ZSE45' val from dual)
    select     val,
            substr(val, instr(val, '.', -1, 1)+1) fin, 
            substr(val, instr(val, '.', -1, 2)+1, instr(val, '.', -1, 1) - instr(val, '.', -1, 2)) milieu,
            substr(val, 1, instr(val, '.', -1, 2)) debut
    from test;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    VAL                                 FIN             MILIEU          DEBUT
    ----------------------------------- --------------- --------------- ------------------------------
    123DC76.3664GDTE.2ZSD.4ESZ2         4ESZ2           2ZSD.           123DC76.3664GDTE.
    12ZSE34.12Z.SZ34.32ZSEZ32.32ZSE45   32ZSE45         32ZSEZ32.       12ZSE34.12Z.SZ34.
    Mais on a beau se contorsionner au niveau du formatage, ces imbrications de fonctions ont vite fait d'être illisibles...

  5. #5
    Candidat au Club
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    Par défaut
    ça fonctionne super bien !!

    Merci.

  6. #6
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    Bonjour,

    Une solution plus évolutive à mon sens serait d'utiliser REGEXP

    Si tu es en 10g ou plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH test 
    AS
      (
       SELECT  '123DC76.3664GDTE.2ZSD.4ESZ2'   str FROM dual  
       )
    select ROWNUM, regexp_substr (str, '[^.]+', 1, rownum) split 
      from test 
    connect by level <= length (regexp_replace (str, '[^.]+'))  + 1
    En l'encapsulant dans une fonction avec en entrée la chaine et le caractere de séparation et en sortie un tableau donnant les chaines et leurs positions ( derniere , avant derniere , etc .. )

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

Discussions similaires

  1. [AC-2003] Recherche remplacer en commençant par la droite
    Par leo79 dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/09/2009, 09h50
  2. [Chaines de caractères] commençant par un nombre
    Par sempire dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/05/2009, 18h30
  3. Réponses: 2
    Dernier message: 06/03/2009, 08h32
  4. VBA: Supprimer ligne commençant par un caractère donné
    Par urbanspike dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 18/01/2008, 12h03
  5. [MySQL] chaîne commençant par "/home/web/"et suivie par un ou plus caractères
    Par Invité dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/04/2007, 01h12

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