16

我对SQL Server 2008 R2 中的DECIMAL(也许)类型有一个非常简单的问题。NUMERIC

MSDN 说:

(scale) 小数点右侧可以存储的最大小数位数。比例必须是从 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))

将数字转换为数字数据类型的算术溢出错误。

我认为 5,5 意味着我最多可以有 5 位数字,并且最多可以有 5 位小数点。

正如我所尝试的:

SELECT CAST(12.851 AS DECIMAL(6,5)) - overflows too

然而

SELECT CAST(1.23456 AS DECIMAL(6,5)) - is OK.

那么真相是什么?

DECIMAL(a,b)说我最多可以有一个数字,其中只有 b 位在小数点的右边(在小数点的左边还有 ab)?

我对到处复制的文档中的声明感到非常困惑。请花点时间给我解释一下这个简单的事情。

非常感谢!

4

1 回答 1

21

考虑它的最简单方法(对我来说)是精度是总位数,其中比例是小数点右侧的位数。SoDECIMAL(p,s)表示p-s点左侧的s数字和点右侧的数字。

这解释了您看到的所有转换错误:2.8514不可能是decimal(5,5)因为p-s = 012.851不可能是decimal(6,5)因为p-s = 1等等。

于 2013-04-05T20:25:52.137 回答