SSMS中SQL SELECT语句返回0而非预期50的运算问题
问题原因
- 该问题由SQL Server的整数除法自动截断特性导致:当除法运算的两个操作数均为整数类型时,SQL Server会自动截断计算结果的小数部分,仅保留整数位。
- 你给出的语句计算过程如下:
- 首先计算
1500-1000,得到整数结果500 - 执行
500/1000运算:两个操作数均为整数,整数除法会直接截断小数部分,得到结果0而非预期的0.5 - 最后执行
0*100,最终返回结果为0
- 首先计算
修复方案
只需调整运算逻辑,触发浮点除法即可得到预期的50,可参考以下几种常用写法:
- 给除数/被除数增加小数位,隐式转为浮点类型运算
select ((1500-1000)/1000.0)*100 - 显式转换其中一个操作数为小数类型
select ((1500-1000)/CONVERT(DECIMAL(10,2), 1000))*100 - 调整运算顺序,先乘后除规避小数截断
select ((1500-1000)*100)/1000
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

