SQL Server 2005中整数除法小数位数是否有全局设置?
关于SQL Server 2005整数除法与小数位数的问题
嘿,我来帮你理清楚这个问题~首先得先明白为什么你执行的那些查询会得到这样的结果:在SQL Server里,两个整数之间的除法默认是整数除法,它会直接截断小数部分只保留整数,所以5/13得到0,哪怕之后把这个0转成real或者decimal,结果依然是0——因为原始计算结果已经是整数0了,转换类型不会改变这个值。
回到你的核心问题:不存在全局设置能让整数除法直接返回指定小数位数的结果。这是SQL Server的既定规则,整数运算的结果类型默认就是整数,没办法通过全局配置修改这个行为。
不过要得到0.38这种两位小数的结果,有几种靠谱的做法:
先将其中一个操作数转换为小数类型,再执行除法,最后按需保留两位小数:
-- 先转其中一个数为带小数的类型,再除法后转两位小数 SELECT CAST(CAST(5 AS DECIMAL(10,2)) / 13 AS DECIMAL(10,2)); -- 或者直接用带小数的字面量 SELECT CAST(5.0 / 13 AS DECIMAL(10,2));用
ROUND函数直接对精确除法结果取两位小数:SELECT ROUND(CAST(5 AS DECIMAL)/CAST(13 AS DECIMAL), 2);
这些方法都能让你得到想要的0.38结果,核心思路就是避免直接用两个整数做除法,先把至少一个数转换成小数类型,让SQL Server执行浮点/小数除法而非整数除法,再对结果做小数位数的控制。
内容的提问来源于stack exchange,提问作者Nabil
相关产品推荐
相关产品推荐

