gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:35:25 25 4
gpt4 key购买 nike

我对 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) 表示我最多可以有一个数字,其中只有 b 位于小数点右侧(小数点左侧还有 a-b) ?

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

非常感谢!

最佳答案

(对我来说)最简单的思考方式是精度是总位数,其中小数位数是小数点右侧的位数。因此,DECIMAL(p,s) 表示该点左侧的 p-s 位数字,以及该点右侧的 s 位数字。

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

关于sql-server - SQL Server 十进制长度 - 可以还是必须?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15842390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com