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 14/03/2011, 19h16   #1
Invité de passage
 
Inscription : mars 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
Par défaut Requête SQL (simple) pour remplacer mot

Bonjour,

Je suis assez débutante dans SQL et je suis actuellement en train de modifier une base de données, et évidemment, certains mots ne sont pas toujours écrits de la même facon.
Donc j'ai importé mon fichier excel sous sql developper, je compte travailler dessus et ensuite le réexporter sous excel.

Je voulais modifier des choses dans ma colonne VILLE, mais je remarque que ca n'est pas pris en compte.

Code :
1
2
3
4
 
SELECT REPLACE (VILLE, 'St-Hyacinthe ', 'Ste-Hyacinthe')
FROM liste_clients
;
Or quand j'ai regardé par la suite, ca n'a pas modifié le nom dans les colonnes voulues.
Est ce que c'est mon code qui est le mauvais?

Merci d'avance de votre aide!
Ninette85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 19h23   #2
Modérateur
 
Avatar de Golgotha
 
Homme cédric
Développeur informatique
Inscription : août 2007
Messages : 732
Détails du profil
Informations personnelles :
Nom : Homme cédric
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2007
Messages : 732
Points : 1 573
Points : 1 573
Envoyer un message via Skype™ à Golgotha
Bonjour,

Je pense que c'est un UPDATE que tu dois faire en non un SELECT.

Code :
UPDATE liste_clients SET VILLE = REPLACE(VILLE,'St-Hyacinthe ','Ste-Hyacinthe');
et ensuite un petit commit.

la doc :

Code :
UPDATE [nom_de_la_table] SET [nom_du_champ] = REPLACE([nom_du_champ],'[chaine_a_remplacer]','[chaine_de_remplacement]');
__________________
modérateur webmasters - développements web & php
faq jQuery - règles du forum - faqs web
mon espace perso
Venez participez au deuxième defi Web !
Golgotha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 08h58   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Pour éviter la mésaventure qui te donne du travail, il faut externaliser les villes dans une table de référence. Ainsi, la liste_clients ne contiendra qu'une clé étrangère faisant référence à l'identifiant de la ville et la ville sera toujours présentée avec la même orthographe.

En l'occurrence, cette ville devrait être orthographiée 'Sainte-Hyacinthe' !

Et en principe on ne nomme pas les tables au pluriel !
Cette structure de tables serait préférable :
Ville (vil_id, vil_nom...)
Client (clt_id, clt_nom, clt_adresse, clt_code_postal, clt_id_ville...)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 13h29   #4
Futur Membre du Club
 
Inscription : août 2009
Messages : 22
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 22
Points : 15
Points : 15
Envoyer un message via Yahoo à dramanebox Envoyer un message via Skype™ à dramanebox
Par défaut Pour confirmation

Juste pour appuyer cette idée de Cynefil permettant de faciliter la maintenance et mieux encore d'optimiser la gestion de l'entité client.

dramanebox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 15h04   #5
Invité de passage
 
Inscription : mars 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
Je suis tout à fait d'accord avec vous deux sur le fait que la base de données n'est pas vraiment conceptualisée. Pour dire vrai, quand je l'ai eu elle était formatée excel et c'était plusieurs fichiers excel...

Par contre, j'ai quand même essayé la requete avec le UPDATE, et je ne comprends toujours pas: cela ne modifie pas mes données comme voulu
Ninette85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 15h58   #6
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

Il y a plus simple comme requête de mise a jour :

Code SQL :
1
2
3
4
 
UPDATE liste_clients
SET Ville = 'Ste-Hyacinthe'
WHERE Ville = 'St-Hyacinthe'

Cela dit, la requete de Golgotha devrait fonctionner quand meme...

peux-tu donner un exemple de ce que tu as comme données ?

C'est aussi peut-être un problème de Collation, si celle de ta colonne est sensible à la casse, alors 'St-Hyacinthe' est différent de 'st-Hyacinthe' !

tu peux contourner le problème en spécifiant une collation insensible à la casse :
Code SQL :
1
2
3
4
 
UPDATE liste_clients
SET Ville = 'Ste-Hyacinthe'
WHERE Ville = 'St-Hyacinthe' COLLATE FRENCH_CI_AI
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 21h14   #7
Invité de passage
 
Inscription : mars 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
Merci beaucoup!! Finalement c'est la requete

Code SQL :
1
2
3
4
 
UPDATE liste_clients
SET Ville = 'Ste-Hyacinthe'
WHERE Ville = 'St-Hyacinthe'

qui a marché. Aucune idée pourquoi l'autre non...

Vous êtes des anges, merci!!
Ninette85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 14h32   #8
Invité de passage
 
Inscription : mars 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
Héhé bonjour encore à tous,

Ca doit vous arriver souvent quand vous découvrez une nouvelle base de données de découvrir encore plus chaque jour les erreurs qu'il y a dedans...
Je me demande une chose, j'ai remarqué que lorsque j'ai importé les données sous sql developper (qui est en anglais chez moi), que les "é" sont devenus des "¿"...j'imagine que c'était mal codé dès le départ dans excel?

Est ce qu'il y aurait une commande pour changer cela dans toutes les tables (je compte remplacer par un "e" simple, on ne sait jamais pour l'avenir), ou est ce que je dois faire manuellement chacune des tables?

Aussi une dernière question, est ce qu'il est possible comme dans excel de créer dans sql developper une nouvelle colonne à partir d'une autre? Du genre "si dans l'autre table il est écrit "niania", alors 1; si "niania2" alors 3...ect?

Merci d'avance
Ninette85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 15h13   #9
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

Pour ton problème d'encodage, c'est un peu plus comliqué que ça... il n'y a sûrement pas que les é qui ont été remplacés, mais sûrement aussi les "à", le "è", les "ç", j'en passe...

quel est l'encodage d'origine ?

Pour l'ajout de la colonne tu peux faire ceci :
Code SQL :
1
2
3
4
5
6
 
ALTER TABLE MaTable
ADD NomDeLaColonneCalculee AS CASE 
	WHEN ColonneReference='niania' THEN 1
	WHEN ColonneReference='niania2' THEN 3
	END

Mais... pourquoi veux-tu faire cela ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 15h44   #10
Invité de passage
 
Inscription : mars 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
L'encodage d'origine? Je peux le savoir quelque part en particulier? En fait comme le fichier est un fichier excel à la base, je pense que les choses ont été entrées manuellement.
A priori je viens de regarder, et le problème se retrouve seulement pour les "é" et les "è". Le reste étant à priori des chiffres

Merci pour l'ajout de colonne, ca va sûrement bien m'aider!

Sinon pourquoi je fais ca? En fait, je dois réaliser des études statistiques sur ce fichier, mais je dois le nettoyer avant.
Le truc, c'est que j'aurais pu le nettoyer manuellement sous Excel parce qu'il y a assez peu de lignes (moins de 300), mais étant donné que je débute en parallèle sur SQL, je me suis dit que ca serait bien d'apprendre ce genre de choses pour l'avenir (je me destine à travailler comme analyste marketing par base de données si tout marche bien)
Ninette85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 15h57   #11
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Si tu es amenée à utiliser beaucoup cette colonne, tu peux la rendre persistente (en ajoutant "PERSISTED" à la fin du code que j'ai posté )

sans ça, le calcul est effectué au moment des requêtes

en la rendant persistante, la colonne est "en dure", et est mise à jour automatiquement (lors d'insertion ou de mise à jour des colonnes sur lesquelles reposent le calcul). Les données sont alors directement disponible (déjà calculées) au moment des requetes. Tu peux en plus l'indexer si tu veux optimiser les requetes.
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 16h00   #12
Invité de passage
 
Inscription : mars 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
Ah super! Oui c'est en effet très probable que je la réutilise, car je compte recoder une variable nominale en l'occurence en une catégorielle (histoire de rendre mes analyses stats un peu plus simples)

Donc si je la rend PERSISTED, une fois que j'aurais tout fini mon nettoyage sous SQL, lorsque je ré-extraierais (oula!!) mon fichier sous formal excel disons, cela sera comme une colonne supplémentaire c'est ca?

Ah vraiment super merci, je me sens vraiment moins seule ) quelle solidarité!
Ninette85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 16h07   #13
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
c'est dans tous les cas une colonne supplémentaire

Dans un cas (non persistante) sa valeur est calculée au moment ou elle entre en jeu (dans le select, ou dans le where...)
dans l'autre cas (persistante), sa valeur est calculée au moment de l'insertion et enregistrée avec les autres données de la table. elle est mise à jour le cas échéant si une des valeurs qui entrent en jeu dans son calcul est modifiée. Mais au moment de l’exécution d'une requête qui fait appel à cette colonne, la valeur est déjà calculée.
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2011, 20h23   #14
Invité de passage
 
Inscription : mars 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
Ok merci, c'est noté.

Sinon pour l'encodage des "é" je dois donc le faire chacun manuellement dans chaque colonne, je ne peux pas faire tout d'un coup partout?
Ninette85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 09h56   #15
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
hmmm

As-tu plusieurs colonnes dans une table, ou plusieurs tables concernées ?

pour une table donnée, tu peux faire toutes les colonnes concernées en une seule requête, mais il faudra quand même spécifier chaque colonne dans la requete...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 17h33   #16
Invité de passage
 
Inscription : mars 2011
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 8
Points : 0
Points : 0
Non c'est dans la même table
Ninette85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 18h13   #17
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Si le nombre de colonnes concernées est raisonnable, autant le faire à la main :

Code SQL :
1
2
3
4
5
6
 
UPDATE MaTable
SET Colonne1 = REPLACE(Colonne1, '?', 'e'),
Colonne2 = REPLACE(Colonne2, '?', 'e'),
...
ColonneN = REPLACE(ColonneN, '?', 'e'),

Il sera peut être utile de copier/coller le caractère incorrect (avec une requête SELECT,...) pour être sur que c'est le bon caractère
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h08.


 
 
 
 
Partenaires

Hébergement Web