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

Langage SQL Discussion :

séparer nom et prénom


Sujet :

Langage SQL

  1. #1
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut séparer nom et prénom
    salut tout le monde

    j'ai une table avec trois champ texte , nom , prenom avec nom et prénom sont vide , texte contient nom et prénom je veux séparer nom et le prénom et mettre chacun dans une case nom et prénom

    par exemple

    rami minooo mettre rami dans case nom et minooo dans case prénom

    comment faire avec requete sql

    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 277
    Points : 11 733
    Points
    11 733
    Par défaut
    Avec INSTR comme fonction pour donner la position de l'espace dans le texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    update ta_table
    set nom = SUBSTR(texte FROM 1 FOR instr(texte, ' ') - 1),
      prenom = SUBSTR(texte FROM instr(texte, ' ') + 1)
    where nom is null
      and prenom is null
      and texte LIKE '_ %' ;
    A adapter à ton SGBD selon le nom et la syntaxe exacte de SUBSTR et INSTR.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut
    mais j'utilise access la requte ne fonctionne pas sur access

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 277
    Points : 11 733
    Points
    11 733
    Par défaut
    Access doit être ce qu'il y a de plus éloigné du SQL standard... A l'avenir, je te conseille fortement de poster sur le forum Access/Requêtes et SQL.

    Quant à ma requête, en SQL Access ça doit donner un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE ta_table
    SET nom = MID(texte, 1, INSTR(texte, ' ') - 1),
      prenom = MID(texte, INSTR(texte, ' ') + 1)
    WHERE nom IS NULL
      AND prenom IS NULL
      AND texte LIKE '? *' ;
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    attention

    il y aura des problemes avec la presence de nom compose (noble)
    "dupont de nenours alfred".....
    et c'est la meme chose en inversant la chaine avec les prenoms
    Jean michel
    j'ai eu cette difficulte, que j'ai solutionne 'a la main' en mettant un
    -
    pour "fusionner" les mots d'un nom ou prenom
    ex
    dupont de nenours Jean michel
    vers
    dupont-de-nenours Jean-michel
    puis en lancant une requete

    (d'ou l'interet de bien reflechir a la construction de ces tables)

    a+
    Merci d'ajouter un sur les tags qui vous ont aidé

  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 741
    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 741
    Points : 52 454
    Points
    52 454
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Avec INSTR comme fonction pour donner la position de l'espace dans le texte :
    INSTR n'existe pas en SQL. C'est SUBSTRING.

    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
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut
    EST ce que il 'a une solution pour séparer le nom et prénom merci

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Pour minooo. Et la solution proposé par Antoun? Est-ce qu'elle marche, ou pas, sinon, quel est le problème?
    SQL pro
    INSTR n'existe pas en SQL. C'est SUBSTRING.
    Je doute que SUBSTRING fournisse la position d'un caractère dans une chaine de caractères, à la lecture de http://sqlpro.developpez.com/cours/s...onctions/#L1.5 Je n'ai pas trouvé de fonction de la norme le permettant.
    Cordialement
    Soazig

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 741
    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 741
    Points : 52 454
    Points
    52 454
    Billets dans le blog
    5
    Par défaut
    Pardon, mal lu. Dans la norme SQL c'est la fonction POSITION qui recherche la position d'un caractère ou d'une sous chaine dans une chaine.

    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/ * * * * *

  10. #10
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut
    JE n'arrive pas a comprendre la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE ta_table
    SET nom = MID(texte, 1, INSTR(texte, ' ') - 1),
      prenom = MID(texte, INSTR(texte, ' ') + 1)
    WHERE nom IS NULL
      AND prenom IS NULL
      AND texte LIKE '? *' ;
    est ce que vous pouvez me faire expliquer

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Texte est le nom de la colonne dans laquelle il y a nom espace prénom, à toi de changer par le nom de ta colonne à toi.
    INSTR(texte, ' ') calcule où se trouve l'espace dans le texte.
    Par exemple INSTR('mon exemple',' ') renverra 4.
    MID(mon_texte, n,m) renvoie la portion de mon_texte entre le nième caractère et le m ième.
    MID(texte, 1, INSTR(texte, ' ') - 1) combine les deux, pour te donner que la partie de texte avant l'espace.
    MID(texte, INSTR(texte, ' ') + 1) te renvoie la partie de texte après l'espace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE nom IS NULL
      AND prenom IS NULL
    on ne prend que les noms et prénoms qui ne sont pas connu, qui sont donc à null.
    on prend les lignes de la table dont le texte qui a un espace en deuxième caractère espace.
    Je pense qu'il y a une erreur j'aurais écrit
    Et là on prend les lignes de la table dont la colonne "texte" contient un espace où qu'il soit.

    J'espère que c'est plus clair.
    Soazig

  12. #12
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 277
    Points : 11 733
    Points
    11 733
    Par défaut
    Superbe explication soazig, je n'aurais pas fait mieux

    Citation Envoyé par soazig Voir le message
    on prend les lignes de la table dont le texte qui a un espace en deuxième caractère espace.
    Je pense qu'il y a une erreur j'aurais écrit
    Et là on prend les lignes de la table dont la colonne "texte" contient un espace où qu'il soit.
    Effectivement, c'est une erreur de ma part. Ce que je voulais c'est être sûr qu'il y a un espace et qu'il ne soit pas en première position, car si le INSTR donne 1, la formule du nom fera une erreur.

    Aucun LIKE ne permet de vérifier ça, il faut donc écrire la condition avec un INSTR :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND INSTR(texte, ' ') > 1
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

Discussions similaires

  1. [SQL] Séparer Nom Prénom placés dans une cellule unique
    Par arnaudperfect dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 15/12/2023, 08h54
  2. Séparer le nom et prénom
    Par minooo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/03/2012, 18h59
  3. Séparer le nom du prénom par une formule
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/03/2011, 19h19
  4. [VBA-E] Séparer Nom Prénom placés dans une cellule unique
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/04/2007, 21h23
  5. [Access] Séparer Le Nom du Prénom
    Par razorbek dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/12/2006, 14h21

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