Jan*_*zen 16 sql-server precision decimal scale
我真的只是在SQL Server 2008 R2中输入DECIMAL(也许NUMERIC)类型的问题.
MSDN说:
(比例)可以存储在小数点右侧的最大小数位数.比例必须是从0到p的值.
我理解以下方式:
DECIMAL(10, 5)- 我可以存储12345.12345或12345678.91.DECIMAL(5, 5)- 我可以有12345或1234.5或1.2345等...清楚吗?
但我收到此错误消息:
SELECT CAST(2.8514 AS DECIMAL(5,5))
Run Code Online (Sandbox Code Playgroud)
算术溢出错误将数字转换为数据类型数字.
我认为5,5意味着我可以拥有最多5位数字,最多5位CAN小数点右侧.
我试过:
SELECT CAST(12.851 AS DECIMAL(6,5)) - overflows too
Run Code Online (Sandbox Code Playgroud)
然而
SELECT CAST(1.23456 AS DECIMAL(6,5)) - is OK.
Run Code Online (Sandbox Code Playgroud)
那么真相是什么?
DECIMAL(a,b) 我说我可以得到一个数字,并且它们只有小数点正好(并且在左边有一个倒数到倒数点)?
我真的很困惑在doc中的语句被复制到处.请花一点时间向我解释这个简单的事情.
非常感谢!
Pon*_*ife 21
最简单的思考方式(对我而言)是精度是总位数,其中 scale是小数点右边的位数.因此,DECIMAL(p,s)表示p-s点左侧的s数字,以及点右侧的数字.
这解释了你所看到的所有转换错误:2.8514不能是decimal(5,5)因为p-s = 0; 12.851不能decimal(6,5)因为p-s = 1等等.