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

如何用CASE语句创建新列或更新旧列?以googleplaystore表Size列为例

解决方法

首先得完善你的SQL逻辑,补上k转MB的计算,再实现保存新列的需求,分两种场景说明:

1. 仅查询时生成新列(不修改原表)

如果只是想在查询结果里得到处理后的新列,直接给CASE表达式加AS指定新列名即可,同时补充单位转换逻辑:

SELECT 
    Size, -- 保留原列方便对比,不需要可直接删除
    CASE
        WHEN RIGHT(Size, 1) = 'k' THEN CAST(CAST(SUBSTRING(Size, 1, LEN(Size)-1) AS FLOAT) / 1024 AS DECIMAL(10,2)) || ' MB'
        WHEN RIGHT(Size, 1) = 'M' THEN SUBSTRING(Size, 1, LEN(Size)-1) || ' MB'
        ELSE 'Varies with device'
    END AS Size_MB -- 这里的Size_MB就是你要的新列名
FROM googleplaystore;

说明:

  • 遇到k结尾的行,先截取数字部分转成浮点型,除以1024转成MB数值,再保留两位小数后拼接单位
  • 遇到M结尾的行,直接截取数字部分拼接MB单位
  • 特殊情况保留原描述

2. 永久修改原表:添加新列并删除原Size列

如果要修改表结构,分三步操作:

第一步:给表新增字段

ALTER TABLE googleplaystore ADD Size_MB VARCHAR(50); -- 可根据实际需求调整字段类型和长度

第二步:用CASE逻辑给新字段赋值

UPDATE googleplaystore
SET Size_MB = CASE
    WHEN RIGHT(Size, 1) = 'k' THEN CAST(CAST(SUBSTRING(Size, 1, LEN(Size)-1) AS FLOAT) / 1024 AS DECIMAL(10,2)) || ' MB'
    WHEN RIGHT(Size, 1) = 'M' THEN SUBSTRING(Size, 1, LEN(Size)-1) || ' MB'
    ELSE 'Varies with device'
END;

第三步:删除原Size列

ALTER TABLE googleplaystore DROP COLUMN Size;

注意:不同数据库的字符串拼接语法有差异,比如MySQL用CONCAT()、SQL Server用+,你可以根据自己使用的数据库调整拼接方式。

内容的提问来源于stack exchange,提问作者maja kralj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:07:01