如何用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
相关产品推荐
相关产品推荐

