SQL Server十进制标度长度 - 可以是或必须是?

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等等.