概述
数据库:sqlserver;
错误案例:(status为int类型)select *,(case status when 0 then '正常' when 1 then '删除' else status end) as status from tb;
错误信息:在将 varchar 值 '正常' 转换成数据类型 int 时失败。
原因分析:简单来说,不同类型数值不能转换。按照“数据类型优先级”规则,case表示式中最高优先级的数据类型决定了表达式返回值的数据类型。“数据类型优先级”规则可以在SQL Server Books Online(BOL)找到,它规定了int数据类型的优先级要比nvarchar数据类型高。
解决思路:case when then配合cast/convert,先将int类型转换成varchar类型。
cast/convert:将某种数据类型的表达式显式转换为另一种数据类型。例:cast(status as varchar(64)),将int类型的status转换成varchar类型;
解决方法:select a.* ,(case a.status when 0 then '正常' when 1 then '删除' else a.status end) as status from
(select *,cast(status as varchar(64)) status from tb) a;
最后
以上就是顺心蜡烛为你收集整理的sqlserver中,case when then 不同类型数值的转换(case 字段 when int then varchar end)的全部内容,希望文章能够帮你解决sqlserver中,case when then 不同类型数值的转换(case 字段 when int then varchar end)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复