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 :

Sélectionner le premier mot dans une chaine de caractères


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 11
    Points
    11
    Par défaut Sélectionner le premier mot dans une chaine de caractères
    Bonjour

    Voilà, c'est tout simple, je voudrais savoir en MySQL comment construire ma requête qui prendrait juste le premier mot dans ma colonne et se positionne par rapport à mon séparateur.

    Exemple:
    Thomas
    Florence_Pascal
    John dupont
    Gilles.chien

    Je ne voudrais juste sélectionner que les premiers mots.

    Merci

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Code pour couper au premier espace :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUBSTRING_INDEX(nom, ' ', 1) from personnes

    La doc : http://dev.mysql.com/doc/refman/5.0/...ubstring-index
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Spartacusply Voir le message
    Code pour couper au premier espace :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUBSTRING_INDEX(nom, ' ', 1) from personnes

    La doc : http://dev.mysql.com/doc/refman/5.0/...ubstring-index
    Merci pour ta réponse super rapide. Oui je connais cette méthode, mais je voudrais prendre en considération toutes sortes de séparateurs ,' ' ,'_','.' dans la même requête.
    Y a-t-il une possibilité ?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 775
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 775
    Points : 52 747
    Points
    52 747
    Billets dans le blog
    5
    Par défaut
    Dans une sous-requête, construisez une table de séparateur et faites le produit cartésien de cette table de séparateurs avec votre table de données et remplaçant le séparateur statique par la colonne contenant le séparateur de votre table construite en sous-requête.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse,
    Pourrais-tu me donner un petit exemple sur quoi partir, car je dois t’avouer que je n'ai jamais tenté ce genre de chose.


    PS: Bon après, j'avais trouvé la methode FULLTEXT super utile avec les fonctions MATCH(colonne1,colonne2) et AGAINST('texte' IN BOOLEAN MODE) mais ça n'identifie qu'un mot et je voudrais remplacer 'texte' par ma colonne 2, mais ça ne marche pas.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 775
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 775
    Points : 52 747
    Points
    52 747
    Billets dans le blog
    5
    Par défaut
    Donnez le DDL de vos tables ainsi qu'un exemple sous forme INSERT.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Bonjour merci de m'aider c'est super sympas.

    Voila ma requete d'insertion de ma premier table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO $TABLE_APPLICATIONS_26E (id_appli, designation, basicat, entite_exploitante)VALUES ('$id_appli','$designation','$basicat','$entite_exploitante');

    requete de ma deuxieme table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO $FT_CARTO (id_appli, application) VALUES ('$id_appli', '$application');
    Mon champs identifier est designation 1er table c'est dans cette colonne ou plusieurs données on plusieurs séparateurs :chien_jaune;bleu-orange;vert rouge...

    mon champs que je veux c'est application dans ma 2eme table: les données sont comme dans designation

    Mon but et de réaliser donc une requete de comparaison de valeurs entre ces 2 colonnes pour vérifier qu'il n'y a pas de differences.
    Il faut que la valeur de designation soit identifier dans application si elle ne s'y trouve pas alors on prend pas.

    Ma requete deja réaliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUBSTRING_INDEX(designation, ' ', 1),SUBSTRING_INDEX(application, ' ', 1),designation,application from applications,ft_carto where applications.id_appli = ft_carto.id_appli and if(SUBSTRING_INDEX(designation, ' ', 1) != SUBSTRING_INDEX(application, ' ', 1),1,0);
    Cette requette donc selectionner juste la partie de gauche de ma chaine au premier espace . Et évidament il me reste tous ceux qui sont separer par des '.' , '_' ou '-'.

    Ou sinon pour faire plus court je veux selectionner toutes ma chaine de caractère et m’arrêter a chaque foi que je tombe sur un caractere spéciaux :','','_','.'.

    Merci à toi

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Re bonjour,

    Bon apres pleins de teste je viens de résoudre mon problème sa marche impeccable .

    Voici ma solution pour ceux que ça intéresse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT designation,if (INSTR(designation, ' '),SUBSTRING_INDEX(designation, ' ', 1),if(INSTR(designation, '_'),SUBSTRING_INDEX(designation, '_', 1),0))
    from applications
    Ici la condition sélectionne dans ma colonne que le premier mot de ma chaine qui ont une présence de caractère de séparateur ' ','_','.','-'.
    Comme par exemple:
    Dans ma colonne j'ai :
    --> chien-jaune
    --> chien_bleu
    --> chat noire

    Ca donne --> chien
    --> chien
    --> chat

    Merci encore a vous 2 .

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Et qu'est ce que ça donne avec :

    chien_jaune et noir
    ?

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Re,

    Si dans ton champs tu as
    chien_jaune et noir
    il va prendre que
    chien
    car le premier separateur et un '_'.
    Si c'est 2 champs
    chien_jaune
    et un autre
    noir
    il va prendre que
    chien
    pour le premier et
    noir
    pour le dernier.

    Biensur ma requete ici prend en concideration que ' ' et '_' il suffit juste d'agrandire la condition pour rajouter les autres paramètre de séparateur.

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par melongourmand Voir le message
    Re,

    Si dans ton champs tu as il va prendre que car le premier separateur et un '_'.
    Si c'est 2 champs et un autre il va prendre que pour le premier et pour le dernier.

    Biensur ma requete ici prend en concideration que ' ' et '_' il suffit juste d'agrandire la condition pour rajouter les autres paramètre de séparateur.

    Autant pour moi je vien de vérifier un truc et effectivement il y a encore un petit bug .

    Si dans mon chant il y a
    chien_jaune noir
    il ne prend que
    chien_jaune
    car le premier parametre prend en consideration ' ' en premier donc il faut que je me penche de se coter . Si ta une idée pour m'aidée

  12. #12
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par melongourmand Voir le message
    Autant pour moi je vien de vérifier un truc et effectivement il y a encore un petit bug .
    C'est ce qu'il me semblait...

    Une autre solution, vous pourriez remplacer tous vos séparateurs potentiels par une espace (par exemple), puis effectuer votre coupure sur le résultats de ces remplacements en ne prenant en compte que l'espace.

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Bon j'ai essayer de chercher et je bloque toujours,

    Je reussi bien de remplacer des separateurs par des espaces mais cela ne marche que pour par exemple le '_' si je mais la meme condition pour '-' il ne le prend pas en compte .
    Voici ma requete si ta vous avez une idée pour m'aidez je vous remercie d'avance .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT application,
    if (INSTR(REPLACE(designation, '_', ' '), ' ') ,SUBSTRING_INDEX(REPLACE(designation, '_', ' '), ' ', 1),
    if (INSTR(REPLACE(designation, '-', ' '), ' ') ,SUBSTRING_INDEX(REPLACE(designation, '-', ' '), ' ', 1),
    if(INSTR(designation, ' '),SUBSTRING_INDEX(designation, ' ', 1),
    if(INSTR(designation,designation),designation,0)))) as desi,
    from applications,ft_carto
    where applications.id_appli = ft_carto.id_appli

  14. #14
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    non, il faut imbriquer les REPLACE, pour obtenir une chaine avec uniquement des espaces comme séparateurs, puis imbriquer le tout dans la fonction SUBSTRING pour récupérer le début (jusqu'à la première espace)

  15. #15
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    non, il faut imbriquer les REPLACE, pour obtenir une chaine avec uniquement des espaces comme séparateurs, puis imbriquer le tout dans la fonction SUBSTRING pour récupérer le début (jusqu'à la première espace)
    Pourrais je avoir un ptit exemple d'assemblage ^^ ?

  16. #16
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    quelque chose comme ceci (pas testé)

    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
     
    SELECT application,
        SUBSTRING_INDEX(
            REPLACE(
                REPLACE(
                    designation
                    ,'-'
                    ,' '
                )
                , '_'
                , ' '
            )
            , ' '
            , 1
        )
        AS desi
    FROM ...

  17. #17
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Sa marche nikel je te remercie tu me retire une épine du pied merci a toi , pour tes réponses rapides et tes exemples.
    Voici ma requette pour ceux qui veulent .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT application,SUBSTRING_INDEX(REPLACE(REPLACE(designation,'-',' '), '_', ' '), ' ', 1)AS desi,
    SUBSTRING_INDEX(REPLACE(REPLACE(application,'-',' '), '_', ' '), ' ', 1)AS app
     FROM applications,ft_carto
    WHERE applications.id_appli = ft_carto.id_appli and
    if(SUBSTRING_INDEX(REPLACE(REPLACE(designation,'-',' '), '_', ' '), ' ', 1)!=
    SUBSTRING_INDEX(REPLACE(REPLACE(application,'-',' '), '_', ' '), ' ', 1),1,0)
    Merci a toi

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Réponses: 4
    Dernier message: 04/03/2009, 10h18
  3. Extraction mots dans une chaine de caractère
    Par mercure07 dans le forum C
    Réponses: 6
    Dernier message: 30/07/2008, 13h54
  4. [RegEx] trouver un mot dans une chaine de caractère
    Par starr dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2007, 15h36
  5. recherche de mots dans une chaine de caractères
    Par jeanfrancois dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2006, 10h47

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