Couper un champ en deux [Résolu]

MasterCent 83 Messages postés jeudi 22 septembre 2005Date d'inscription 14 décembre 2011 Dernière intervention - 12 mars 2008 à 12:13 - Dernière réponse : cs_deutsch 58 Messages postés lundi 6 mars 2006Date d'inscription 1 avril 2010 Dernière intervention
- 1 avril 2008 à 09:49
Bonjour à tous :

// Ceci n'est pas un dépanage, mais une préparation à une formation en Access !!! //
// Je n'ai pas besoin d'aide, mais plutôt d'idées à proposer //

Petit cas pratique : Je dois corriger une table dans laquel un champ contient le NOM et le PRENOM, appelé _NP . 
Sachant que c'est une très mauvaise idée de n'avoir qu'un champ (atomisation de l'info),
je décide de créer deux champs, l'un pour les _NOM, l'autre pour les _PRENOM.

Quelles requêtes utiliser pour automatiser la transition ( ou en tout cas, pour une partie du travail ) ?
Attention : Il y a des noms et prénoms composés tel que : Bach Karl Philippe Emmanuel ou Poivre d'Arvor Patrick.

Bon brainstorming.

 
Afficher la suite 

3 réponses

Répondre au sujet
cs_deutsch 58 Messages postés lundi 6 mars 2006Date d'inscription 1 avril 2010 Dernière intervention - 30 mars 2008 à 11:23
+3
Utile
Slt

Mon vieux c'est pas une requete SQL qu'il te faut mais un script Vb ou autre pour pouvoir decompose N&Pre
l'astuce c'est que tu dois commencé
par la fin du champ jusqu'a trouvé un blanc ensuite inséré le résultat dans la table c'est la meuilleurs solution 

Bon courage

 
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_deutsch
MasterCent 83 Messages postés jeudi 22 septembre 2005Date d'inscription 14 décembre 2011 Dernière intervention - 31 mars 2008 à 15:07
+3
Utile
Slt,
Merci à tous ceux qui se sont interressés de près ou de loin à la question.

La réponse est d'abord "culturelle" / y a t-il une prédominance dans la structure nom - prénom,  
par exemple, en Espagne, il y aura en majorité deux noms de familles, etc

Sur base de cette étude, et dans le cas (facile) ou l'habitude serait un nom et un prénom, voici quelques instructions SQL "génériques" pour couper le champ :




--Nettoyage des espaces superflus
update MATABLE set NP = trim(NP) ;

-- Longueur du champ, position du premier blanc, position du suivant ou 0, sous le nom Q_SECTIONS
SELECT len( NP ) as  LONGUEUR  , inStr( 1 , NP , " " )  as PREMIERBLANC , inStr( PREMIERBLANC+1 , NP , " " ) AS SUIVANTBLANC , ID from MATABLE

-- Liaisons de Q_SECTIONS avec MATABLE, pour calculer les valeurs, sous le nom Q_NPSelect MATABLE.ID ,  NP , Left(NP,PREMIERBLANC-1) as N , Right(NP,LONGUEUR-PREMIERBLANC) from MATABLE join Q_SECTIONS on MATABLE.ID Q_SECTIONS.ID where MATABLE.N is null and SUIVANTBLANC 0

-- Mise à jour de MATABLE sur base de Q_NP
UPDATE MATABLE left join Q_NP on  MATABLE.ID = Q_NP.IDSET MATABLE.NOM N , MATABLE.PRENOM P





A l'issu de cette opération, il devrait rester quelques enregistrements à traiter.
De nouveau, il faudra chercher si il existe une majorité dans les cas non traités, les particules ( de, van, ... ) afin de rétablir une traitement.
En final, il ne restera plus que quelques cas dont le nombre ne justifiera plus une automaisation, mais bien un traitement au cas par cas.

Pour info, cette solution s'inspire de la loi de Pareto, qui met en lumière que 80% des cas demanderont 20% de l'énergie...
(cfr
http://fr.wikipedia.org/wiki/Loi_de_Pareto
 80% )

Ce n'est pas LA solution, mais bien un exemple de solution.
Le passage par un script est aussi une solution tentante, (merci deutsch), mais pas plus facile ! (j'ai aussi testé )

...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de MasterCent
cs_deutsch 58 Messages postés lundi 6 mars 2006Date d'inscription 1 avril 2010 Dernière intervention - 1 avril 2008 à 09:49
0
Utile
Cher MasterCent

    la requete que tu viens de nous faire voir est du VB avec du SQL
ce qu'il nous demande c'est du SQL
Commenter la réponse de cs_deutsch

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.