sql-server – 为什么当乘以和其他数字时精度正在减少

前端之家收集整理的这篇文章主要介绍了sql-server – 为什么当乘以和其他数字时精度正在减少前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在sql Server中遇到了以下错误(或功能).

当我使用SUM(*列*),其中列具有数字(18,8)类型,并将其乘以任何其他数字(整数或十进制),结果精度将减少为数字(18,6).

以下是演示的示例脚本.

CREATE TABLE #temp (Qnty numeric(18,8))

INSERT INTO #temp (Qnty) VALUES (0.00000001)
INSERT INTO #temp (Qnty) VALUES (0.00000002)
INSERT INTO #temp (Qnty) VALUES (0.00000003)

SELECT Qnty,1*Qnty
FROM #temp

SELECT (-1)*SUM(Qnty),SUM(Qnty),-SUM(Qnty),SUM(Qnty) * CAST(2.234 as numeric(18,8))
FROM #temp

DROP TABLE #temp

第二个SELECT查询的结果

0.000000    0.00000006  -0.00000006 0.000000

正如你可以看到,我乘以SUM的结果是0.000000

有人可以解释奇怪的行为吗?

UPD.我在2000,2005和2008 sql Server的sql Management Studio中执行了这个查询.

解决方法

使用 SUM聚合数字(18,8)会导致数据类型数字(38,8).

如何在将数值乘以数字时计算出结果数据类型,可以在这里找到:Precision,Scale,and Length (Transact-SQL)

常数-1的数据类型是数字(1,0)

精度是p1 p2 1 = 40
比例为s1 s2 = 8

最大精度为38,并带有数字(38,6).

阅读更多关于为什么它是数字(38,6)在这里:Multiplication and Division with Numerics

猜你在找的MsSQL相关文章