Maison  >  Questions et réponses  >  le corps du texte

Comment utiliser l'instruction Update in Case avec des colonnes comme alias

<p>J'ai une table appelée sales_data avec 3 colonnes (id int, udf varchar(20), date_of_sale datetime). J'essaie de trouver le jour de la semaine de la colonne date_of_sale en ajustant l'heure à 6 heures, je dois maintenant mettre à jour la colonne udf avec le jour de la semaine correspondant à date_of_sale. J'ai une idée pour une requête de sélection, mais comment mettre à jour la colonne udf ? </p> <pre class="brush:php;toolbar:false;">sélectionnez le jour de la semaine (subtime(s.date_of_sale,'6:0:0')) comme putdata, CAS WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=0 THEN 'Dimanche' WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=1 THEN 'Lundi' WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=2 THEN 'Mardi' WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=3 THEN 'mercredi' WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=4 THEN 'Jeudi' QUAND jour de la semaine(subtime(s.date_of_sale ,'6:0:0'))=5 THEN 'vendredi' QUAND jour de la semaine(subtime(s.date_of_sale ,'6:0:0'))=6 THEN 'Samedi' FIN en tant qu'udf à partir de sales_data s;</pre></p>
P粉214089349P粉214089349411 Il y a quelques jours507

répondre à tous(2)je répondrai

  • P粉256487077

    P粉2564870772023-09-06 14:26:54

    Ajoutez des colonnes générées (https://dev.mysql.com/doc/refman/8.0/en/create-table-generated-columns.html) pour simplifier le traitement et éviter les incohérences des données :

    alter table sales_data add weekday varchar(10) GENERATED ALWAYS
      AS (CASE   
        WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=0 THEN 'Sunday'  
        WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=1 THEN 'Monday'  
        WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=2 THEN 'Tuesday'  
        WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=3 THEN 'Wednesday'  
        WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=4 THEN 'Thursday'  
        WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=5 THEN 'Friday'  
        WHEN weekday(subtime(s.date_of_sale ,'6:0:0'))=6 THEN 'Saturday'  
    END );

    Voir la démo : https://dbfiddle.uk/2d5iIvBv

    (Je n'ai pas les mêmes jours de semaine, c'est peut-être la région ?)

    répondre
    0
  • P粉035600555

    P粉0356005552023-09-06 14:04:15

    Votre requête ci-dessus est presque terminée. Il vous suffit d'ajouter des instructions de mise à jour.

    La requête ci-dessous devrait fonctionner pour vous.

    update sales_data 
    set udf = case   
        when weekday(subtime(date_of_sale,'6:0:0')) = 0 then 'Sunday'  
        when weekday(subtime(date_of_sale,'6:0:0')) = 1 then 'Monday'  
        when weekday(subtime(date_of_sale,'6:0:0')) = 2 then 'Tuesday'  
        when weekday(subtime(date_of_sale,'6:0:0')) = 3 then 'Wednesday'  
        when weekday(subtime(date_of_sale,'6:0:0')) = 4 then 'Thursday'  
        when weekday(subtime(date_of_sale,'6:0:0')) = 5 then 'Friday'  
        when weekday(subtime(date_of_sale,'6:0:0')) = 6 then 'Saturday'  
     end;

    répondre
    0
  • Annulerrépondre