You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在UPDATE语句中结合CASE表达式使用列别名——将sales_data表的udf字段更新为调整时间后的星期值

解决方案:将SELECT逻辑转换为UPDATE语句

没问题,你已经把核心的计算逻辑写对了,只需要把这个逻辑迁移到UPDATE语句的SET子句里,就能实现更新udf字段的需求。

基础版UPDATE语句

直接复用你原SELECT里的CASE逻辑,写法简单直观:

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;

优化版(减少重复计算)

上面的写法会重复计算WEEKDAY(SUBTIME(...))7次,当数据量很大时,可以优化成只计算一次(MySQL 8.0+支持CTE写法):

WITH adjusted_day_calc AS (
    SELECT 
        id,
        WEEKDAY(SUBTIME(date_of_sale, '6:0:0')) AS day_number
    FROM sales_data
)
UPDATE sales_data s
JOIN adjusted_day_calc adc ON s.id = adc.id
SET s.udf = CASE 
    WHEN adc.day_number = 0 THEN 'Sunday' 
    WHEN adc.day_number = 1 THEN 'Monday' 
    WHEN adc.day_number = 2 THEN 'Tuesday' 
    WHEN adc.day_number = 3 THEN 'Wednesday' 
    WHEN adc.day_number = 4 THEN 'Thursday' 
    WHEN adc.day_number = 5 THEN 'Friday' 
    WHEN adc.day_number = 6 THEN 'Saturday' 
END;

重要提醒

  • 如果不需要更新全表数据,记得加上WHERE子句(比如WHERE id BETWEEN 1 AND 100),避免误操作整个表。
  • 确认udf字段的varchar(20)长度足够存储这些星期名称(最长的Wednesday仅10个字符,完全满足要求)。

内容的提问来源于stack exchange,提问作者Vikas Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 12:42:37