我是靠谱客的博主 顺心蜡烛,这篇文章主要介绍sqlserver中,case when then 不同类型数值的转换(case 字段 when int then varchar end),现在分享给大家,希望可以做个参考。

数据库: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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(134)

评论列表共有 0 条评论

立即
投稿
返回
顶部