SQL CASE语句列名未识别报错及语法问题求助
问题解决思路
核心错误分析
- 列名不匹配:你提到要处理
ratings列,但代码里写的是Size,这就是报错「Invalid column name 'Size'」的直接原因——要么是你混淆了列名,要么表中根本没有Size这个列。 - CASE语法错误:
THEN后面不需要加SELECT,直接写字符串处理表达式即可;另外你只处理了末尾是'k'的情况,没覆盖'M'的场景。
修正后的代码
场景1:处理ratings列(你的原始需求)
SELECT ratings, CASE WHEN RIGHT(ratings, 1) IN ('k', 'M') THEN SUBSTRING(ratings, 1, LEN(ratings) - 1) ELSE ratings END AS cleaned_ratings FROM googleplaystore
场景2:确实要处理Size列(需先确认表中存在该列)
如果表中确实有Size列,可能是大小写问题(部分数据库区分大小写),调整后代码如下:
SELECT Size, CASE WHEN RIGHT(Size, 1) IN ('k', 'M') THEN SUBSTRING(Size, 1, LEN(Size) - 1) ELSE Size END AS cleaned_size FROM googleplaystore
代码说明
RIGHT(列名, 1):提取列值的最后一个字符,判断是否为k或MIN ('k', 'M'):同时匹配两种后缀,简化多条件判断SUBSTRING(列名, 1, LEN(列名)-1):截取从第1位到倒数第2位的字符,移除末尾的k/MELSE 列名:如果值末尾没有k/M,返回原数值,避免出现NULLAS cleaned_xxx:给处理后的列起别名,方便区分原始值和清洗后的值
内容的提问来源于stack exchange,提问作者maja kralj
相关产品推荐
相关产品推荐

