Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/02/2011, 20h20   #1
Provisoirement toléré
 
Inscription : avril 2007
Messages : 548
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 548
Points : 48
Points : 48
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
minooo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 22h25   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 544
Points : 9 544
Avec INSTR comme fonction pour donner la position de l'espace dans le texte :

Code :
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 00h13   #3
Provisoirement toléré
 
Inscription : avril 2007
Messages : 548
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 548
Points : 48
Points : 48
mais j'utilise access la requte ne fonctionne pas sur access
minooo est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 16/02/2011, 00h19   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 544
Points : 9 544
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 :
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 18h26   #5
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
attention

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

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

a+
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 09h35   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 18h00   #7
Provisoirement toléré
 
Inscription : avril 2007
Messages : 548
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 548
Points : 48
Points : 48
EST ce que il 'a une solution pour séparer le nom et prénom merci
minooo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 18h08   #8
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
Bonjour,
Pour minooo. Et la solution proposé par Antoun? Est-ce qu'elle marche, ou pas, sinon, quel est le problème?
SQL pro
Citation:
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
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 18h24   #9
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 18h27   #10
Provisoirement toléré
 
Inscription : avril 2007
Messages : 548
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 548
Points : 48
Points : 48
JE n'arrive pas a comprendre la requete
Code :
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
minooo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 20h04   #11
Membre expérimenté
 
Inscription : octobre 2002
Messages : 654
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 654
Points : 552
Points : 552
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 :
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
soazig est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/02/2011, 22h35   #12
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 544
Points : 9 544
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 :
AND INSTR(texte, ' ') > 1
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h38.


 
 
 
 
Partenaires

Hébergement Web