SQL查询中如何按条件重命名列值,其余值保留?
SQL按条件重命名列指定值(其余值保留)的问题解决
错误原因
你的列a是ENUM类型,ENUM仅允许使用预定义的枚举值,而你指定的new_value不在该枚举的允许值列表中,导致类型不匹配报错。
解决方案
因为仅需返回查询结果,无需修改原表结构,只需将ENUM类型转换为字符串类型即可绕过枚举值限制:
方法1:在ELSE分支转换类型
select a, b, case when a = 'specific value' then 'new_value' else a::varchar -- 将ENUM类型转为字符串 end as c from x;
方法2:统一转换整个CASE表达式的类型
select a, b, (case when a = 'specific value' then 'new_value' else a end)::varchar as c from x;
说明
转换为字符串类型后,查询结果的c列不再受ENUM值限制,既能保留原列的其他值,又能将指定值替换为new_value,完全符合你的查询需求且不会修改原数据库的任何数据。
内容的提问来源于stack exchange,提问作者coffee
相关产品推荐
相关产品推荐

