我是靠谱客的博主 顺心蜡烛,最近开发中收集的这篇文章主要介绍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 when then 不同类型数值的转换(case 字段 when int then varchar end)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部