sql-server – SQL Server十进制刻度长度 – 可以还是必须?

前端之家收集整理的这篇文章主要介绍了sql-server – SQL Server十进制刻度长度 – 可以还是必须?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我真的只是在sql Server 2008 R2中对DECIMAL(也许NUMERIC)类型提出质疑.

MSDN说:

(scale)
The maximum number of decimal digits that can be stored to the right of the decimal point. Scale must be a value from 0 through p.

我理解如下:

>如果我有DECIMAL(10,5) – 我可以存储12345.12345或12345678.91.
>如果我有DECIMAL(5,5) – 我可以有12345或1234.5或1.2345等…

清楚吗?

但是我收到这个错误信息:

SELECT CAST(2.8514 AS DECIMAL(5,5))

Arithmetic overflow error converting numeric to data type numeric.

我认为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)表示我可以有一个数字,并且它们中的一个是小数点的右边(左边的那个a-b到dec点)?

我真的很困惑doc中的声明,它被复制到处.请花一点时间解释一下这个简单的事情.

多谢谢!

解决方法

想到这个(最简单的方法)的最简单方法就是精度是数字的总数,其中scale是小数点右边的位数.所以DECIMAL(p,s)表示点左边的p-s数字,点数右边的s位数.

这解释了你所看到的所有转换错误:2.8514不能是十进制(5,5),因为p-s = 0; 12.851不能为小数(6,因为p-s = 1等等.

猜你在找的MsSQL相关文章