Sql server 2008 SQL Server中的十进制数据类型

Sql server 2008 SQL Server中的十进制数据类型,sql-server-2008,types,casting,decimal,Sql Server 2008,Types,Casting,Decimal,为什么下面的返回值是.500000而不是.500 因为你是在计算除数,而不是结果。而且您没有指定精度 参见以下示例: SELECT 50 / CAST(100 AS decimal(3)) ,50 / CAST(100 AS decimal(6,3)) ,CAST (50 / CAST(100 AS decimal(3)) AS decimal(3)) ,CAST (50 / CAST(100 AS decimal(3)) AS decimal(6,3))

为什么下面的返回值是.500000而不是.500


因为你是在计算除数,而不是结果。而且您没有指定精度

参见以下示例:

SELECT 50 / CAST(100 AS decimal(3))
      ,50 / CAST(100 AS decimal(6,3))
      ,CAST (50 / CAST(100 AS decimal(3)) AS decimal(3))
      ,CAST (50 / CAST(100 AS decimal(3)) AS decimal(6,3))
精度是数字中的位数。Scale是 数字中小数点右边的数字。例如 数字123.45的精度为5,刻度为2

使用默认精度18和比例3

因此,当你对小数3进行运算时,你会得到一个小数3,0。然后将其用作除数,SQL Server将遵循其生成的比例规则

Operation  Result precision                     Result scale
e1 / e2    p1 - s1 + s2 + max(6, s1 + p2 + 1)   max(6, s1 + p2 + 1)

有什么区别?看起来是一样的,正确的,谢谢,卡尔。我在铸造除数时得到了那个角色。但是为什么查询结果是.500000,而不是.5、.500,默认的18位数字,或者其他数字?太好了!谢谢解释得很好。
Operation  Result precision                     Result scale
e1 / e2    p1 - s1 + s2 + max(6, s1 + p2 + 1)   max(6, s1 + p2 + 1)