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 :

Rechercher/remplacer sur plusieurs champs


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Points : 15
    Points
    15
    Par défaut Rechercher/remplacer sur plusieurs champs
    Bonjour,

    je me confronte à des soucis de caractères dans mes tables du fait d'encodages UTF7/UTF8. Du coup je fais des rechercher/remplacer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE matable SET col1= replace(col1, 'ô', 'ô');
    UPDATE matable SET col1= replace(col1, 'î', 'î');
    UPDATE matable SET col1= replace(col1, 'â', 'â');
    UPDATE matable SET col2= replace(col2, 'î', 'î');
    UPDATE matable SET col2= replace(col2, 'â', 'â');
    UPDATE matable SET col2= replace(col2, 'î', 'î');
    UPDATE matable SET col3= replace(col3, 'â', 'â');
    UPDATE matable SET col3= replace(col3, 'î', 'î');
    UPDATE matable SET col3= replace(col3, 'â', 'â');
    ...
    Mon souci est que cette syntaxe m'oblige à le faire pour chaque caractère et pour chaque champ (et pour chaque table) et me cela fait des 100aines et des 100aines de lignes à écrire.

    N'existe-t-il pas une solution pour rechercher/remplacer dans tous les champs d'une table ? cela me ferait déjà gagner énormément de temps... Toute idée étant bonne à prendre, n'hésitez pas.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    Dans un premier temps, tu peux diviser le nombre de tes requêtes en regroupant les mises à jour pour chaque colonne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE matable SET col1= REPLACE(REPLACE(REPLACE(col1, 'ô', 'ô'), 'î', 'î'), 'â', 'â');
    Ensuite, regrouper le tout en une seule requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE matable 
    SET     col1 = REPLACE(REPLACE(REPLACE(col1, 'ô', 'ô'), 'î', 'î'), 'â', 'â')
        ,   col2 = REPLACE(REPLACE(REPLACE(col2, 'ô', 'ô'), 'î', 'î'), 'â', 'â')
    ...
    ;

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

    Et dans un deuxième temps, vous pouvez envisager de créer automatiquement vos requêtes UPDATE avec... une requête SELECT dans les vues d'informations du schéma. (j'imagine que c'est une opération que vous ne ferez qu'une fois, pour corriger des données erronées dans votre BDD ?)


    Quel est votre SGBD ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,

    Et dans un deuxième temps, vous pouvez envisager de créer automatiquement vos requêtes UPDATE avec... une requête SELECT dans les vues d'informations du schéma. (j'imagine que c'est une opération que vous ne ferez qu'une fois, pour corriger des données erronées dans votre BDD ?)


    Quel est votre SGBD ?
    Interessant... comment cela s'écrirait ?

    J'intègre des tables sur phppgadmin et il s'agit en effet de corrections en amont de l'utillisation. J'ajoute des tables régulièrement et doit systématiquement rectifier ces caractères spéciaux.

    Citation Envoyé par al1_24 Voir le message
    Dans un premier temps, tu peux diviser le nombre de tes requêtes en regroupant les mises à jour pour chaque colonne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE matable SET col1= REPLACE(REPLACE(REPLACE(col1, 'ô', 'ô'), 'î', 'î'), 'â', 'â');
    Ensuite, regrouper le tout en une seule requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE matable 
    SET     col1 = REPLACE(REPLACE(REPLACE(col1, 'ô', 'ô'), 'î', 'î'), 'â', 'â')
        ,   col2 = REPLACE(REPLACE(REPLACE(col2, 'ô', 'ô'), 'î', 'î'), 'â', 'â')
    ...
    ;
    Merci beaucoup, ca marche impec. Ma méthode était beaucoup plus artisanale et fastidieuse, d'où ce post.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Nouveau challenge ^^

    Je dois remplacer des caractères par un guillement simple... sauf que ce guillement simple est interprété, cela me renvoit donc une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE matable SET col1= REPLACE(col1, '’', ''');
    Comment contourner ce pb ?

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 392
    Points
    28 392
    Par défaut
    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE matable SET col1= REPLACE(col1, '’', '''');

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Parfait, merci beaucoup !

  8. #8
    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
    Citation Envoyé par Dropped_User Voir le message
    Interessant... comment cela s'écrirait ?

    Sur le principe, quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT concat('UPDATE ',   TABLE_NAME 
    			, ' SET ' , COLUMN_NAME , ' = REPLACE(REPLACE(REPLACE(', COLUMN_NAME ,', ''ô'', ''ô''), ''î'', ''î''), ''â'', ''â'');')
    FROM  information_schema.COLUMNS
    WHERE TABLE_SCHEMA = 'VotreSchema'
    AND DATA_TYPE IN ('VARCHAR', 'CHAR')
    En mettant le bon nom de schéma, et en modifiant au besoin les type a prendre en compte. Bref, à adapter quoi.

    Pour arriver à la deuxième requête proposée par al1_24, qui fait toutes les colonne de la table en même temps, c'est un peu plus compliqué, mais sans doute plus efficace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT concat('UPDATE ',   TABLE_NAME 
    			, ' 
    	SET	' 
    			,GROUP_CONCAT(
    				CONCAT(COLUMN_NAME , ' = REPLACE(REPLACE(REPLACE(', COLUMN_NAME ,', ''ô'', ''ô''), ''î'', ''î''), ''â'', ''â'')
    		')
     
    			)
    ,';')
    FROM  information_schema.COLUMNS
    WHERE TABLE_SCHEMA = 'test'
    AND DATA_TYPE IN ('VARCHAR', 'CHAR')
    GROUP BY TABLE_NAME

  9. #9
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Il faut que je teste ca

    Merci en tout cas les gars !

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Vous devriez regarder du côté de la fonction convert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select convert('ôîâîâîâîâ', 'UTF8', 'LATIN1') as cvt;
     
    cvt
    ---------
    ôîâîâîâîâ

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

Discussions similaires

  1. rechercher remplacer sur plusieurs colonnes
    Par deca2 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/05/2008, 11h57
  2. Réponses: 8
    Dernier message: 13/04/2008, 14h44
  3. [Débutant]Recherche sur plusieurs champs
    Par Touareg dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/03/2007, 14h04
  4. Réponses: 2
    Dernier message: 30/11/2004, 09h42
  5. Recherche d'un mot avec LIKE sur plusieurs champs
    Par reynhart dans le forum Langage SQL
    Réponses: 16
    Dernier message: 26/11/2004, 17h41

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