292

我试图找出 SQL Server 中列的十进制数据类型。我需要能够存储 15.5、26.9、24.7、9.8 等值

我分配decimal(18, 0)给列数据类型,但这不允许我存储这些值。

这样做的正确方法是什么?

4

8 回答 8

530

DECIMAL(18,0)将允许小数点后为 0 位。

使用类似的东西DECIMAL(18,4)应该就可以了!

总共有 18 位数字,其中小数点后有 4 位(小数点前有 14 位)。

于 2009-05-01T21:09:19.017 回答
142

你应该使用如下:

DECIMAL(m,a)

m是你的小数可以有的总位数。

a是小数点后可以有的最大位数。

http://www.tsqltutorials.com/datatypes.php有所有数据类型的描述。

于 2009-05-01T21:17:00.557 回答
44

的设置Decimal是它的精度和比例或在普通语言中,一个数字可以有多少位以及小数点右侧需要多少位。

因此,如果您放入PIa Decimal(18,0),它将被记录为3?

如果你放入PIaDecimal(18,2)它会被记录为3.14

如果放入PIDecimal(18,10)记录为3.1415926535.

于 2009-05-01T22:04:48.273 回答
39

大多数时候,我使用十进制(9,2),它在 sql 十进制类型中占用最少的存储空间(5 个字节)。


精度 => 存储字节

  • 1 - 9 => 5
  • 10-19 => 9
  • 20-28 => 13
  • 29-38 => 17

它可以存储从 0 到 9 999 999.99(前 7 位 + 小数点后 2 位 = 总共 9 位),对于大多数值来说足够大。

于 2015-06-16T03:28:11.497 回答
11

你可以试试这个

decimal(18,1)

数字的长度应为 18 位。小数点后的数字长度应仅为 1,不能超过 1。

于 2018-03-23T02:48:13.320 回答
6

在 MySQL DBdecimal(4,2)中,只允许输入总共 4 位数字。正如您在 中看到的decimal(4,2),这意味着您总共可以输入 4 位数字,其中两位数字用于保留小数点后。

因此,如果您在 MySQL 数据库中输入 100.0,则会显示类似“Out of Range Value for column”之类的错误。

因此,您只能在此范围内输入:从 00.00 到 99.99。

于 2013-02-17T13:34:35.187 回答
3

其他答案都是对的。假设您的示例反映了您想要的所有可能性DECIMAL(3, 1)。或者,DECIMAL(14, 1)将允许总共 14 位数字。你的工作就是考虑什么是足够的。

于 2009-05-01T21:27:24.637 回答
1
request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
于 2017-11-22T10:28:24.020 回答