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

Requêtes MySQL Discussion :

Extraire sous chaine de caractères


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Points : 46
    Points
    46
    Par défaut Extraire sous chaine de caractères
    Bonjour,

    J'ai une base de données Ogr dont un attribut UM est une chaine de caractères qui possède un certain nombre de fois une série de 5 chiffres. J'aimerais savoir s'il est possible d'extraire séparement les différentes séries de 5 chiffres de chaque ligne et celà pour toutes les lignes de ma base.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Donne la structure de la table, un petit jeu de données et le résultat attendu si tu veux qu'on t'aide efficacement.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Points : 46
    Points
    46
    Par défaut
    UM est l'unique attribut de la table Org. Par exemple si j'ai les deux lignes suivantes de UM :

    uN = 25415, bureau = 2B; uN = 15489, bureau = 12A
    uN = 86764, bureau = 4M; uN = 15647, bureau = 2C; uN = 48789, bureau = 4A

    je veux pouvoir extraire :
    25415
    15489
    86764
    15647
    48789

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si les deux lignes de données que tu fournis dans ton message sont deux des lignes de la table, ça ne va pas être facile puisque nous sommes en présence d'une colonne multivaluée, ce qui est contraire aux principes des bases de données relationnelles. J'espère qu'il s'agit d'un import de données mal foutu et pas de la structure réelle de la BDD !

    Travaillons avec la première chaîne de caractères 'uN = 25415, bureau = 2B; uN = 15489, bureau = 12A' et avec les fonctions de chaînes de caractères de MySQL.

    1) Quelle est la position de la première occurrence de 'uN = ' ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT INSTR('uN = 25415, bureau = 2B; uN = 15489, bureau = 12A', 'uN = ')
    => Réponse : 1

    2) Récupérons les 5 caractères qui suivent 'uN = ' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT SUBSTRING(
      'uN = 25415, bureau = 2B; uN = 15489, bureau = 12A' 
      FROM INSTR('uN = 25415, bureau = 2B; uN = 15489, bureau = 12A', 'uN = ') + 5 
      FOR 5
    )
    => Résultat :
    '25415'

    3) Supprimons la première occurrence de 'uN = ' de la chaîne de départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT RIGHT (
      'uN = 25415, bureau = 2B; uN = 15489, bureau = 12A',
      LENGTH('uN = 25415, bureau = 2B; uN = 15489, bureau = 12A') - INSTR('uN = 25415, bureau = 2B; uN = 15489, bureau = 12A', 'uN = ') - 10
    ) AS chaine_moins_premier_uN;
    => Résultat :
    'bureau = 2B; uN = 15489, bureau = 12A'

    4) Refaisons la même opération qu'en 2 pour avoir le second uN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT SUBSTRING(
      RIGHT (
        'uN = 25415, bureau = 2B; uN = 15489, bureau = 12A',
        LENGTH('uN = 25415, bureau = 2B; uN = 15489, bureau = 12A') - INSTR('uN = 25415, bureau = 2B; uN = 15489, bureau = 12A', 'uN = ') - 10
      )
      FROM INSTR(
        RIGHT (
          'uN = 25415, bureau = 2B; uN = 15489, bureau = 12A',
          LENGTH('uN = 25415, bureau = 2B; uN = 15489, bureau = 12A') - INSTR('uN = 25415, bureau = 2B; uN = 15489, bureau = 12A', 'uN = ') - 10
        ), 
        'uN = '
      ) + 5
      FOR 5
    ) AS uN_2;
    => Résultat :
    15489

    Si tu bidouilles ça dans une procédure SQL qui injecte les résultats intermédiaires dans une table temporaire puis qui interroge celle-ci, tu devrais avoir ton résultat mais je reconnais que ça va être galère !

    Un coup de Explode en PHP serait à mon avis plus simple !

    Bon courage !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup pour ta réponse je vais tester ça.

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Points : 46
    Points
    46
    Par défaut
    Est ce que ce serait plus faisable si on avait :

    uN = 21564, agence = M; uN = 56476, agence = M...

    c'est à dire toujours la même chaine de caractères après 'uN = _ _ _ _ _ '?

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par a1331 Voir le message
    Est ce que ce serait plus faisable si on avait :

    uN = 21564, agence = M; uN = 56476, agence = M...

    c'est à dire toujours la même chaine de caractères après 'uN = _ _ _ _ _ '?
    Euh... il n'y a pas toujours la même chaîne de caractères après 'uN = ' ! Une fois 21564 et l'autre 56476 ! Ce sont justement ces nombres que tu veux récupérer.

    Par contre, si tu as la possibilité de changer la structure des données qui donnent cette colonne multi-valuée, fais-le ! Ce sera beaucoup plus simple avec des données correctement modélisées !

    Bis repetita :
    Citation Envoyé par CinéPhil
    J'espère qu'il s'agit d'un import de données mal foutu et pas de la structure réelle de la BDD !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Points : 46
    Points
    46
    Par défaut
    Je ne pense pas pourvoir modifier la structure. Je voulais savoir si les données autre que uN=21564 et uN=56476 sont un problème.

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par a1331 Voir le message
    Je ne pense pas pourvoir modifier la structure. Je voulais savoir si les données autre que uN=21564 et uN=56476 sont un problème.
    Non puisque j'ai réussi à extraire les deux données. Ce qui pose problème, c'est le fait qu'il y a plusieurs uN sur la même ligne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. extraire une chaine de caractères
    Par nopnop dans le forum C
    Réponses: 11
    Dernier message: 10/04/2007, 17h21
  2. Récupérer une sous chaine de caractère
    Par Alexandre` dans le forum C
    Réponses: 9
    Dernier message: 27/02/2007, 00h15
  3. position d'une sous-chaine de caractère
    Par trax44 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 01/02/2007, 21h14
  4. Extraire une chaine de caractéres
    Par fatati dans le forum Oracle
    Réponses: 4
    Dernier message: 30/01/2007, 14h39
  5. Réponses: 4
    Dernier message: 07/12/2006, 11h01

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