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 :

Requête SQL (simple) pour remplacer mot


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  2. #2
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE liste_clients SET VILLE = REPLACE(VILLE,'St-Hyacinthe ','Ste-Hyacinthe');
    et ensuite un petit commit.

    la doc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE [nom_de_la_table] SET [nom_du_champ] = REPLACE([nom_du_champ],'[chaine_a_remplacer]','[chaine_de_remplacement]');
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  4. #4
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2009
    Messages : 73
    Points : 160
    Points
    160
    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.


  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    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

  6. #6
    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,

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

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE liste_clients
    SET Ville = 'Ste-Hyacinthe'
    WHERE Ville = 'St-Hyacinthe' COLLATE FRENCH_CI_AI

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup!! Finalement c'est la requete

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    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!!

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    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

  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,

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    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)

  11. #11
    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
    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.

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    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é!

  13. #13
    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
    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.

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    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?

  15. #15
    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
    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...

  16. #16
    Nouveau Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Non c'est dans la même table

  17. #17
    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
    Si le nombre de colonnes concernées est raisonnable, autant le faire à la main :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête SQL localisée pour affichage date/heure
    Par nicoboud2 dans le forum SQL
    Réponses: 1
    Dernier message: 11/05/2007, 10h55
  2. Réponses: 7
    Dernier message: 21/09/2006, 14h06
  3. requête SQL simple
    Par Echizen1 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 20/09/2006, 14h34
  4. [SQL ] Fonction pour remplacer caract. speciaux et accentué
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 3
    Dernier message: 31/01/2006, 15h16
  5. [Requête SQL] Problème pour echantilloner
    Par jool dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/08/2005, 09h08

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