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 :

SELECT string après un caractère spécifique [MySQL-5.5]


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2018
    Messages : 3
    Points : 5
    Points
    5
    Par défaut SELECT string après un caractère spécifique
    Bonjour à tous,

    Etant novice en MySQL et SGBD en général, j'ai besoin de votre aide.

    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
     
    SELECT pDesc, pAlias FROM printers;
    +-------+--------------------------------------------------+
    | pDesc | pAlias                                           |
    +-------+--------------------------------------------------+
    | B1CD  | \\172.16.128.100\B1CD_c_127.103_OKIC711          |
    | B121  | \\172.16.128.100\B121_C_172.129_Lexmark CS510    |
    | B122  | \\172.16.128.100\B122_n_127.123_ricohmp4055      |
    | B119  | \\172.16.128.100\b119_c_127.108_okiC711          |
    | A003  | \\172.16.128.100\A003_2_n_172.111_ricohmp6503    |
    | A003  | \\172.16.128.100\A003_1_n_172.100_ricohmp6503    |
    | B1LA  | \\172.16.128.100\B1LA_n_127.105_lexmark460dn     |
    | C227  | \\172.16.128.100\C227_C_172.130_Lexmark CS510    |
    | C230  | \\172.16.128.100\C230_C_172.131_Lexmark CS510    |
    | C232  | \\172.16.128.100\C232_c_127.118_oki711           |
    | C2L2  | \\172.16.128.100\C2L2_c_127.117_Brother-HL4040CN |
    | D201  | \\172.16.128.100\D201 _c_127.102_OKI C711        |
    +-------+--------------------------------------------------+
    J'aimerai faire en sorte que seul le modèle de l'imprimante soit affiché dans la colonne pAlias après le dernier '_', si vous avez vous-même une solution ou bien un lien expliquant comment faire parce que là, je sèche

    Merci d'avance et bonne journée.

  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
    Citation Envoyé par nebulla Voir le message
    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
     
    SELECT pDesc, pAlias FROM printers;
    +-------+--------------------------------------------------+
    | pDesc | pAlias                                           |
    +-------+--------------------------------------------------+
    | B1CD  | \\172.16.128.100\B1CD_c_127.103_OKIC711          |
    | B121  | \\172.16.128.100\B121_C_172.129_Lexmark CS510    |
    | B122  | \\172.16.128.100\B122_n_127.123_ricohmp4055      |
    | B119  | \\172.16.128.100\b119_c_127.108_okiC711          |
    | A003  | \\172.16.128.100\A003_2_n_172.111_ricohmp6503    |
    | A003  | \\172.16.128.100\A003_1_n_172.100_ricohmp6503    |
    | B1LA  | \\172.16.128.100\B1LA_n_127.105_lexmark460dn     |
    | C227  | \\172.16.128.100\C227_C_172.130_Lexmark CS510    |
    | C230  | \\172.16.128.100\C230_C_172.131_Lexmark CS510    |
    | C232  | \\172.16.128.100\C232_c_127.118_oki711           |
    | C2L2  | \\172.16.128.100\C2L2_c_127.117_Brother-HL4040CN |
    | D201  | \\172.16.128.100\D201 _c_127.102_OKI C711        |
    +-------+--------------------------------------------------+
    J'aimerai faire en sorte que seul le modèle de l'imprimante soit affiché dans la colonne pAlias après le dernier '_'
    Au lieu de vous donner la solution, je vais guider la démarche de construction progressive de la requête.

    1) Faites une requête qui renverse la colonne pAlias avec la fonction REVERSE.

    2) Ajoutez à cette requête ce qu'il faut pour trouver la position du premier caractère de soulignement (donc en fait le dernier puisque la chaîne est inversée) à l'aide de la fonction LOCATE.

    3) Ajoutez à la requête 2 le calcul faisant la différence entre la longueur de pAlias (CHAR_LENGTH) et la position trouvée en 2, moins 1.

    4) Ajoutez à la requête 3 ce qu'il faut pour extraire les [résultat du calcul de la requête 3] caractères de gauche de pAlias à l'aide de la fonction LEFT

    5) Comparez visuellement le résultat de 4 avec la colonne pAlias pour vérifier si la formule d'extraction est bonne.

    Si vous n'y arrivez pas, postez la requête que vous avez essayée et je vous aiderai à la finir.
    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
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2018
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Bonjour et merci beaucoup de votre réponse.

    J'ai suivi vos étapes et j'en suis arrivé à ce résultat :

    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
     
    SELECT pDesc, LEFT(pAlias, LENGTH(pAlias) - LOCATE('_', REVERSE(pAlias))-1) as imprimantes, pAlias  FROM printers;
    +-------+----------------------------------+--------------------------------------------------+
    | pDesc | imprimantes                      | pAlias                                           |
    +-------+----------------------------------+--------------------------------------------------+
    | B1CD  | \\172.16.128.100\B1CD_c_127.10   | \\172.16.128.100\B1CD_c_127.103_OKIC711          |
    | B121  | \\172.16.128.100\B121_C_172.12   | \\172.16.128.100\B121_C_172.129_Lexmark CS510    |
    | B122  | \\172.16.128.100\B122_n_127.12   | \\172.16.128.100\B122_n_127.123_ricohmp4055      |
    | B119  | \\172.16.128.100\b119_c_127.10   | \\172.16.128.100\b119_c_127.108_okiC711          |
    | A003  | \\172.16.128.100\A003_2_n_172.11 | \\172.16.128.100\A003_2_n_172.111_ricohmp6503    |
    | A003  | \\172.16.128.100\A003_1_n_172.10 | \\172.16.128.100\A003_1_n_172.100_ricohmp6503    |
    | B1LA  | \\172.16.128.100\B1LA_n_127.10   | \\172.16.128.100\B1LA_n_127.105_lexmark460dn     |
    | C227  | \\172.16.128.100\C227_C_172.13   | \\172.16.128.100\C227_C_172.130_Lexmark CS510    |
    | C230  | \\172.16.128.100\C230_C_172.13   | \\172.16.128.100\C230_C_172.131_Lexmark CS510    |
    | C232  | \\172.16.128.100\C232_c_127.11   | \\172.16.128.100\C232_c_127.118_oki711           |
    | C2L2  | \\172.16.128.100\C2L2_c_127.11   | \\172.16.128.100\C2L2_c_127.117_Brother-HL4040CN |
    | D201  | \\172.16.128.100\D201 _c_127.10  | \\172.16.128.100\D201 _c_127.102_OKI C711        |
    +-------+----------------------------------+--------------------------------------------------+

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2018
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    J'ai trouvé une solution

    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
     
    SELECT pDesc, RIGHT(pAlias, LOCATE('_', REVERSE(pAlias))-1) as imprimantes, pAlias  FROM printers;
    +-------+------------------+--------------------------------------------------+
    | pDesc | imprimantes      | pAlias                                           |
    +-------+------------------+--------------------------------------------------+
    | B1CD  | OKIC711          | \\172.16.128.100\B1CD_c_127.103_OKIC711          |
    | B121  | Lexmark CS510    | \\172.16.128.100\B121_C_172.129_Lexmark CS510    |
    | B122  | ricohmp4055      | \\172.16.128.100\B122_n_127.123_ricohmp4055      |
    | B119  | okiC711          | \\172.16.128.100\b119_c_127.108_okiC711          |
    | A003  | ricohmp6503      | \\172.16.128.100\A003_2_n_172.111_ricohmp6503    |
    | A003  | ricohmp6503      | \\172.16.128.100\A003_1_n_172.100_ricohmp6503    |
    | B1LA  | lexmark460dn     | \\172.16.128.100\B1LA_n_127.105_lexmark460dn     |
    | C227  | Lexmark CS510    | \\172.16.128.100\C227_C_172.130_Lexmark CS510    |
    | C230  | Lexmark CS510    | \\172.16.128.100\C230_C_172.131_Lexmark CS510    |
    | C232  | oki711           | \\172.16.128.100\C232_c_127.118_oki711           |
    | C2L2  | Brother-HL4040CN | \\172.16.128.100\C2L2_c_127.117_Brother-HL4040CN |
    | D201  | OKI C711         | \\172.16.128.100\D201 _c_127.102_OKI C711        |
    +-------+------------------+--------------------------------------------------+
    Merci beaucoup de votre aide je n'aurais jamais pensé à utiliser REVERSE sans vous
    Passez une bonne journée.

  5. #5
    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
    Au temps pour moi, j'avais commis quelques erreurs !
    Citation Envoyé par CinéPhil
    3) Ajoutez à la requête 2 le calcul faisant la différence entre la longueur de pAlias (CHAR_LENGTH) et la position trouvée en 2, moins 1.

    4) Ajoutez à la requête 3 ce qu'il faut pour extraire les [résultat du calcul de la requête 3] caractères de gauche de pAlias à l'aide de la fonction LEFT
    Le 3) était inutile et il fallait utiliser RIGHT en 4.

    Voici la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT pDesc, RIGHT(pAlias, LOCATE('_', REVERSE(pAlias)) -1) as imprimantes, pAlias 
    FROM printers
    EDIT : Vous avez-trouvé la solution tout seul.
    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 !

  6. #6
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 172
    Points : 498
    Points
    498
    Par défaut
    hello,

    CinéPhil, ca m'a l'air bien compliqué ton truc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pDesc, pAlias, substring_index(pAlias, '_', -1) model FROM printers;

  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
    Il peut y avoir plusieurs _ dans la chaîne et il faut extraire le texte à partir du caractère suivant le dernier _.

    EDIT : Effectivement, je n'avais encore jamais employé SUBSTRING_INDEX et je ne savais pas que ça pouvait compter à partir de la droite de la chaîne.
    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
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 066
    Points
    19 066
    Par défaut
    Salut à tous.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`      integer unsigned  not null auto_increment primary key,
      `pdesc`   varchar(255)      not null,
      `palias`  varchar(255)      not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test` (`pdesc`,`palias`) values
      ('B1CD', '\\172.16.128.100\B1CD_c_127.103_OKIC711'),
      ('B121', '\\172.16.128.100\B121_C_172.129_Lexmark CS510'),
      ('B122', '\\172.16.128.100\B122_n_127.123_ricohmp4055'),
      ('B119', '\\172.16.128.100\b119_c_127.108_okiC711'),
      ('A003', '\\172.16.128.100\A003_2_n_172.111_ricohmp6503'),
      ('A003', '\\172.16.128.100\A003_1_n_172.100_ricohmp6503'),
      ('B1LA', '\\172.16.128.100\B1LA_n_127.105_lexmark460dn'),
      ('C227', '\\172.16.128.100\C227_C_172.130_Lexmark CS510'),
      ('C230', '\\172.16.128.100\C230_C_172.131_Lexmark CS510'),
      ('C232', '\\172.16.128.100\C232_c_127.118_oki711'),
      ('C2L2', '\\172.16.128.100\C2L2_c_127.117_Brother-HL4040CN'),
      ('D201', '\\172.16.128.100\D201 _c_127.102_OKI C711')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+-------+------------------------------------------------+
    | id | pdesc | palias                                         |
    +----+-------+------------------------------------------------+
    |  1 | B1CD  | \172.16.128.100B1CD_c_127.103_OKIC711          |
    |  2 | B121  | \172.16.128.100B121_C_172.129_Lexmark CS510    |
    |  3 | B122  | \172.16.128.100B122_n_127.123_ricohmp4055      |
    |  4 | B119  | \172.16.128.10119_c_127.108_okiC711          |
    |  5 | A003  | \172.16.128.100A003_2_n_172.111_ricohmp6503    |
    |  6 | A003  | \172.16.128.100A003_1_n_172.100_ricohmp6503    |
    |  7 | B1LA  | \172.16.128.100B1LA_n_127.105_lexmark460dn     |
    |  8 | C227  | \172.16.128.100C227_C_172.130_Lexmark CS510    |
    |  9 | C230  | \172.16.128.100C230_C_172.131_Lexmark CS510    |
    | 10 | C232  | \172.16.128.100C232_c_127.118_oki711           |
    | 11 | C2L2  | \172.16.128.100C2L2_c_127.117_Brother-HL4040CN |
    | 12 | D201  | \172.16.128.100D201 _c_127.102_OKI C711        |
    +----+-------+------------------------------------------------+
    --------------
    select  substring_index(palias, '_', -1) as palias
      from  `test`
    --------------
     
    +------------------+
    | palias           |
    +------------------+
    | OKIC711          |
    | Lexmark CS510    |
    | ricohmp4055      |
    | okiC711          |
    | ricohmp6503      |
    | ricohmp6503      |
    | lexmark460dn     |
    | Lexmark CS510    |
    | Lexmark CS510    |
    | oki711           |
    | Brother-HL4040CN |
    | OKI C711         |
    +------------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

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

Discussions similaires

  1. [XL-2003] Macro, extraire chaîne après caractère spécifique
    Par arkhang dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/11/2013, 12h03
  2. Réponses: 2
    Dernier message: 15/03/2010, 21h41
  3. SELECT d'une chaine de caractère spécifique dans un champ
    Par damnn dans le forum Développement
    Réponses: 1
    Dernier message: 09/12/2009, 10h35
  4. Réponses: 17
    Dernier message: 07/07/2009, 14h00
  5. Réponses: 9
    Dernier message: 02/12/2007, 20h54

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