【问题标题】:what is numeric(18, 0) in sql server 2008 r2sql server 2008 r2 中的数字 (18, 0) 是什么
【发布时间】:2014-10-01 04:39:45
【问题描述】:

我从该数据类型中找到了一个包含此列的表

numeric(18, 0)

请问这是什么?为什么018的意思是

我已经检查了这个问题Difference between numeric, float and decimal in SQL Server,但无法理解。\

我可以在该列中添加 (-10) 吗?

我可以在该列中添加所有负数吗?

我可以在该列中添加任何正数吗?

更新 1

这是我在该列中找到的数据样本

100
263
13
2
9
4
3
3
28
15
33
16
135
50
64
60
100
500
150

更新 2 可以有-+ 吗?

【问题讨论】:

  • 它本质上是一个非常大的整数。是的,你有一个负数。不,你不能有任何数字,它不能超过 18 位有效数字。
  • 这里是 BOL 数据类型的链接。 msdn.microsoft.com/en-us/library/ms187752.aspx
  • @SeanLange 你说it must be no larger than 18 significant digits 但请检查更新的问题,有小于 18 位的值
  • @SeanLange 该链接未提供信息,请问您确定吗?
  • 如果样本代表数据,那么有人真的很喜欢浪费空间

标签: sql sql-server sql-server-2008-r2


【解决方案1】:

The first value is the precision and the second is the scale,所以18,0 本质上是 18 位数字,小数点后有 0 位数字。例如,如果您有18,2,您将有 18 位数字,其中两位将在小数点后...

18,2 示例:1234567890123456.12

numericdecimal 之间没有功能区别,除了名称之外,我想我记得数字是第一位的,就像在早期版本中一样。

然后回答,“我可以在该列中添加 (-10) 吗?” - 可以。

【讨论】:

  • @AgnieszkaPolec 是的,你可以有负值。您需要了解 BOL(在线书籍)。它是 sql server 的文档。我之前发布了数据类型页面的链接。从那里的链接将带您到每个数据类型的数据类型页面。它非常详细地解释了它们。
  • @SeanLange 谢谢,但我检查了该链接并浏览到数字部分,它没有描述。它只有十进制和浮点数的链接。不管怎样,现在我明白了数字的概念了。
  • 也许您查看了错误的页面或其他内容,因为数字页面非常深入。 decimal [ (p[ ,s] )] 和 numeric[ (p[ ,s] )] 固定精度和小数位数。当使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。十进制的 ISO 同义词是 dec 和 dec(p, s)。 numeric 在功能上等同于十进制。 p(精度)将存储的小数位数的最大总数,包括小数点的左侧和右侧。精度必须是从 1 到最大精度 38 之间的一个值......太长了,不适合这里。
【解决方案2】:

This page 解释得很好。

作为numeric,可以存储在该字段中的允许范围是-10^38 +110^38 - 1

括号中的第一个数字是要存储的总位数。计算小数的两边。在本例中为 18。因此,您可以有一个小数点前 18 位数字、小数点后 18 位数字或两者之间的某种组合。

括号中的第二个数字是小数点后要存储的总位数。由于在这种情况下数字为 0,这基本上意味着该字段中只能存储整数。

所以这个特定字段可以存储的范围是-(10^18 - 1)(10^18 - 1)

-999999999999999999999999999999999999 仅限整数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多