为何SQL Server T-SQL中SELECT 1/5结果为0而非0.2?
T-SQL中
SELECT 1/5返回0而非0.2的原因说明 该现象的核心由SQL Server Transact-SQL的两类运算规则决定:数据类型优先级规则、整数除法截断规则,具体两种场景的运算逻辑如下:
SELECT 1/5返回0的原因
语句中的1和5都属于默认int整数类型,当两个操作数都为整数时,T-SQL默认执行整数除法,运算过程会直接舍弃小数部分,仅保留整数位结果。1除以5的实际值为0.2,截断小数后最终返回结果为0。SELECT 1.0/5返回0.200000的原因
语句中的1.0属于decimal精确数值类型,其数据类型优先级高于int。执行运算前,T-SQL会先自动将低优先级的操作数5隐式转换为decimal类型,再执行非截断的精确数值除法,最终返回带小数位的运算结果。末尾的多余零位由decimal类型的精度、标度自动推导规则决定,属于正常的类型输出格式。
拓展说明:如果需要对两个整数做带小数的除法运算,可主动将其中一个操作数显式转换为非整数类型即可,示例写法:
SELECT CONVERT(DECIMAL(10,2),1)/5。
内容的提问来源于stack exchange,提问作者ontananza
相关产品推荐
相关产品推荐

