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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    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 Expert

    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
    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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    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 Expert

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    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 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    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);

+ 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