Vic*_*lin 14 sql-server sql-server-2005 sql-server-2008
我在SQL Server中遇到过以下错误(或功能).
当我使用SUM (*column*)where column有一个numeric(18, 8)类型并将它乘以任何其他数字(整数或十进制)时,结果精度将减少到numeric(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
Run Code Online (Sandbox Code Playgroud)
第二个SELECT查询的结果
0.000000 0.00000006 -0.00000006 0.000000
Run Code Online (Sandbox Code Playgroud)
如您所见,然后我乘以SUM,结果为0.000000
谁有人能解释这种奇怪的行为?
UPD.我在SQL Server Studio 2000,2005和2008 SQL Server上执行了此查询.
numeric(18, 8)使用SUM聚合a会 导致数据类型numeric(38, 8).
可以在此处找到将数字乘以数字时计算结果数据类型的方法:精度,比例和长度(Transact-SQL)
常量-1的数据类型是 numeric(1, 0)
精度p1 + p2 + 1= 40
比例s1 + s2= 8
最高精度为38,离开你numeric(38, 6).
阅读更多关于它为什么的numeric(38, 6)信息:使用数字进行乘法和除法
| 归档时间: |
|
| 查看次数: |
9955 次 |
| 最近记录: |