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 :

[Access] Problème avec REPLACE dans SQL


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [Access] Problème avec REPLACE dans SQL
    Bonjour à tous,

    Je suis en trait de travailler sur access en utilisant le language SQL afin d'effectuer une mise à jour dans plusieurs champs. J'essaie d'exécuter la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE T1_ad SET origination_date = replace(origination_date,'JAN','/01/')
    SET origination_date = replace(origination_date,'FEB','/02/')
    SET origination_date = replace(origination_date,'MAR','/03/');
    J'ai le message d'erreur "opérateur absent".
    Ceci arrive quand je mets plusieurs lignes commençant par "SET" (comme dans l'exemple). Quand je n'en mets qu'une la requête est exécutée correctement.

    Merci d'avance

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Il faut séparer les colonnes à mettre à jour par une virgule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE T1_ad
    SET origination_date = replace(origination_date,'JAN','/01/'),
    origination_date = replace(origination_date,'FEB','/02/'),
    origination_date = replace(origination_date,'MAR','/03/');
    Tout est là : http://sql.developpez.com
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Rebonjour,

    Merci pour cette réponse. Effectivement elle a résolu mon premier problème (celui de l'absence d'opérateur). Mais j'ai maintenant un autre message d'erreur:
    "Destination de sortie "origination_date" repliquée".

    Auriez vous une solution?

    Citation Envoyé par Magnus
    Il faut séparer les colonnes à mettre à jour par une virgule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE T1_ad
    SET origination_date = replace(origination_date,'JAN','/01/'),
    origination_date = replace(origination_date,'FEB','/02/'),
    origination_date = replace(origination_date,'MAR','/03/');
    Tout est là : http://sql.developpez.com

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Oui,

    ton update met à jour la même colonne plusieurs fois, ce qui ne veut rien dire. Ce que tu veux faire relève plutôt du "select case".

    Voir la syntaxe ici : http://dev.mysql.com/doc/refman/5.0/...functions.html

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je continue à avoir des messages d'erreur de syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE T1_ad
    SELECT CASE
    WHEN (origination_date like '%JAN%')
    THEN SET origination_date = REPLACE(origination_date,'JAN','/01/')
    WHEN (origination_date like '%FEB%')
    THEN SET origination_date = REPLACE(origination_date,'FEB','/02/')
    ELSE origination_date 
    END;
    Une idée ?

    Merci d'avance

    Citation Envoyé par vmolines
    Oui,

    ton update met à jour la même colonne plusieurs fois, ce qui ne veut rien dire. Ce que tu veux faire relève plutôt du "select case".

    Voir la syntaxe ici : http://dev.mysql.com/doc/refman/5.0/...functions.html

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    1/ dans l'absolu, la bonne syntaxe serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     UPDATE T1_ad 
     SET origination_date = CASE WHEN (origination_date LIKE '%JAN%') THEN REPLACE(origination_date,'JAN','/01/') 
    WHEN (origination_date LIKE '%FEB%') THEN REPLACE(origination_date,'FEB','/02/') ELSE origination_date END;
    ceci dit, comme tu es sous Access, CASE WHEN doit être remplacé par la fonction VB Switch, et pour le LIKE les % doivent être remplacés par des * :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     UPDATE T1_ad 
     SET origination_date = switch(origination_date LIKE '*JAN*', REPLACE(origination_date,'JAN','/01/'), 
    origination_date LIKE '*FEB*', REPLACE(origination_date,'FEB','/02/'), true, origination_date);
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci, c'est génial: ça marche.

    Maintenant je cherche un moyen pour convertir le format du champs de "texte" en "date". La conversion simple en allant sur la table en mode création ne marche pas: j'ai un message d'erreur "espace memoire insuffisante" qui vient, je pense, du fait qu'il y a bcp de lignes (environ 800 000).

    Merci d'avance

    Citation Envoyé par Antoun
    1/ dans l'absolu, la bonne syntaxe serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     UPDATE T1_ad 
     SET origination_date = CASE WHEN (origination_date LIKE '%JAN%') THEN REPLACE(origination_date,'JAN','/01/') 
    WHEN (origination_date LIKE '%FEB%') THEN REPLACE(origination_date,'FEB','/02/') ELSE origination_date END;
    ceci dit, comme tu es sous Access, CASE WHEN doit être remplacé par la fonction VB Switch, et pour le LIKE les % doivent être remplacés par des * :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     UPDATE T1_ad 
     SET origination_date = switch(origination_date LIKE '*JAN*', REPLACE(origination_date,'JAN','/01/'), 
    origination_date LIKE '*FEB*', REPLACE(origination_date,'FEB','/02/'), true, origination_date);

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Merci
    Merci Antoun !

    Je cherchais partout sur le net un moyen pour arriver à supprimer les différents caractères interdits dans une base, et ta solution marche nickel !

    Super !

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

Discussions similaires

  1. Problème avec like dans une requête SQL
    Par Boublou dans le forum SQL
    Réponses: 2
    Dernier message: 16/08/2007, 15h46
  2. [PL SQL] Problème avec 'case' dans une fonction
    Par divail dans le forum Oracle
    Réponses: 14
    Dernier message: 13/03/2006, 15h50
  3. Problème avec une requete SQL sous access
    Par Luther13 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 14/12/2005, 10h39
  4. [SQL Access] Problème avec Sum()
    Par badgam piero dans le forum Access
    Réponses: 5
    Dernier message: 12/12/2005, 16h00
  5. problème avec graphique dans état access
    Par petitmic dans le forum Access
    Réponses: 5
    Dernier message: 07/09/2005, 14h55

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