mssql sqlserver 1除以2得到结果0-除法错误的相关说明


摘要:
下文详细讲述1除以2结果不正确的处理方法,如下所示:
实验环境:sql server 2008 R2



今天例行sql讨论会议,有同事提出1/2得到的结果为什么返回0的疑问?
在数学计算中,1/2得到的结果应该为0.5才是正确的答案。

    select 1/2,1.0/2,1/2.0
   

我将sql脚本放入SSMS查询分析器中运行,得到的结果的确为0。


出现这种情况的原因,是因为sqlserver返回的数据类型根据参数的数据类型来决定,
由于两个整型相除,所以得到一个整型,即为0。
当我们使用1/2.0或者1.0/2,则得到的结果为0.5,但是有同事又问,为什么整型需要转换为float进行整除,那么这个疑问就是由于sqlserver中数据类型的有限级,
float高于int型,所以int都需转换为float进行相关运算。
类似此类优先级相关知识,在sql中有很多中情况,例:我们拼接字符串对日期进行对比检索时,字符串类型会自动转换为datetime类型,这种现象也是由于datetime比varchar在sqlserver中优先级要高很多。

在其它语言中,也存在1除以2等于0的现象,例:C语言中,也会出现这种现象。


相关阅读:
mssql sqlserver 数据类型优先级相关说明