case when then else 分支判断后计算的数值为什么会自动取舍

AI1983 2019-07-30 08:01:18
举例

select case when 1=1 then 10/3 else 0.123 end
结果为3
怎么能让结果为3.33333333


select case when 1=1 then cast(10 as dec(14,8))/cast(3 as dec(14,8)) else 0.123 end
结果为3.33333333

这是为什么呢

除了这种cast数据类型装换,因为我的计算公式中数值比较多用cast挨个转换不太现实,还有没有其他的方法,请各位指教,谢谢!
...全文
263 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2019-08-02
  • 打赏
  • 举报
回复
请看2楼回复, 是乘以1.0, 非乘以0.1, 二者意义不同.
10乘以1.0用意为将int型转为decimal型(小数点后1位), 数值并未被修改,因为任何数乘以1都是任何数.
如果想保留小数点后8位,应乘以1.00000000.
AI1983 2019-08-02
  • 打赏
  • 举报
回复
乘以0.1是什么原理呢,如果我想保留小数点后边8位应该怎么做呢
wilson1966 2019-07-31
  • 打赏
  • 举报
回复
这个问题之前我也遇过,也是用楼上的方式解决的 下次在写SQL 时,我就习惯性地乘上0.1 结论:这是写程序的宝贵经验
唐诗三百首 2019-07-30
  • 打赏
  • 举报
回复

select Y=case when 1=1 then 10*1.0/3 else 0.123 end

/*
Y
---------------------------------------
3.333333

(1 行受影响)
*/
二月十六 2019-07-30
  • 打赏
  • 举报
回复
被除数的类型不用int
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([num] DECIMAL)
Insert #T
select 10
Go
--测试数据结束
Select num/3 from #T

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧