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

SQL Oracle Discussion :

Extraire le 3ème membre d'une chaîne


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de H.ile
    Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Janvier 2008
    Messages : 122
    Par défaut Extraire le 3ème membre d'une chaîne
    Aloha

    Je travaille sur des chaînes de la forme 11111.AA.1111 ou 11111.A.1111.
    Je souhaite récupérer la partie alpha du milieu et la partie numérique de la fin.

    Voici ce que j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT PERE,
           DATE_DEBUT_PROPRIETE,
           CODE_UF,
           LIBELLE,
           PARCELLE,
           SUBSTR (PARCELLE, 2, 3) AS COMMUNE,
           LPAD (TRIM ('.' FROM REGEXP_SUBSTR (PARCELLE, '\.(.*)\.')), 2, '0')
              AS SECTION,
           REGEXP_SUBSTR (PARCELLE, '\.(.*)$'),
           SUBSTR (PARCELLE, 2, 3) AS COMMUNE,
           DATE_ACQ_PARCELLE
      FROM A_EEE.VUE_DSIT_SIG_COLBERT;
    Pour l'attribut Section, c'est au poil. Pas tellement efficient, mais efficace. Par contre je sèche sur PARCELLE. Ca me renvoie ".AA.1111".

    Quelqu'un a une idée ?

    D'avance, merci

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Les expressions régulières sont plutôt coûteuses en général, utilisez-les en dernier recours.

    Si vos expressions ont une forme bien définie, vous pouvez combiner SUBSTR et INSTR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select substr(val, 1, instr(val, '.', 1, 1)-1) as p1,
           substr(val, instr(val, '.', 1, 1)+1, instr(val, '.', 1, 2)-instr(val, '.', 1, 1)-1) as p2,
           substr(val, instr(val, '.', 1, 2)+1) as p3
      from (select '11111.AA.1111' as val from dual);
     
    P1	P2	P3
    11111	AA	1111

  3. #3
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Voir, utiliser une fonction générique de découpage si le caractère séparateur est constant

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 209
    Par défaut
    Bonjour,

    J'ai essayé, c'est assez efficace mais je me demande si ça n'est pas risqué si quelqu'un touche une des valeurs dans la requête, on ne sait jamais. N'y a-t'il pas plus simple. Pour mon cas j'ai "Durant Marcelle" dans mon champ et je souhaite extraire le D et le M. De cette manière ça marche mais il me semble avoir vu plus simple.

  5. #5
    Membre confirmé Avatar de H.ile
    Profil pro
    Architecte de système d'information
    Inscrit en
    Janvier 2008
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Janvier 2008
    Messages : 122
    Par défaut
    Je viens de tester cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      SELECT        REGEXP_SUBSTR('numero_p', [alpha],1) AS COMMUNE
      FROM DUAL
    Avec ou sans cote. Cela ne me renvoie au mieux que le "p" de numero_p. [A-Z] fonctionne bien mais pourquoi ne puis-je utiliser les définitions de classes ?

    @+

  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

  7. #7
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT REGEXP_SUBSTR ('11111.AA.1111', '[^.]+', 1, 2) milieu,
           REGEXP_SUBSTR ('11111.AA.1111', '[^.]+', 1, 3) fin
      FROM DUAL

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/09/2012, 20h00
  2. [CR XI] extraire la partie numérique d'une chaïne de caractère
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 29/11/2010, 11h26
  3. Extraire le dernier mot d'une chaîne en bash
    Par oranoutan dans le forum Linux
    Réponses: 2
    Dernier message: 16/05/2010, 22h47
  4. [Turbo Pascal] Extraire un nombre entier d'une chaîne de type string
    Par sofpower dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 12/05/2009, 21h10
  5. Réponses: 2
    Dernier message: 08/12/2008, 21h31

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