如何在SQL Server中存储十进制值?


272

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

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

什么是正确的方法?

Answers:


513

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

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

这样一来,您总共可获得18位数字,其中4 在小数点后(小数点前有14位)。


@marc_s,在列数据类型为小数(4,2)的地方,是否仍要存储值“ 4.5”?当我插入值时,它被修改为“ 4.50”
Arun

1
@ArunkumarTK:decimal(4,2)允许小数点前2位和小数点后2位。可以毫无问题地存储“ 4.5”-并且在数值上,“ 4.5”和“ 4.50” 相同
marc_s 2015年

3
@ArunkumarTK:为什么这些应该不同?两者都是“四个半” -的价值是一样的。而NO不使用varchar存储十进制值!
marc_s 2015年

1
我知道这是一个古老的讨论,但是在那种情况下@ArunkumarTK不会是“ 4.05”和“ 4.5”。
Shelby115 2015年

2
是的,当18和19都使用9个字节时,为什么18如此受欢迎(例如默认值(18,0))?
xr280xr

136

您应该使用如下:

DECIMAL(m,a)

m 是您的小数位数可以包含的总位数。

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

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


3
通常用DECIMAL(p,s)表示,其中p代表精度(一个数字中的最大允许数字),而s代表小数位数(小数点后的最大允许数字)。
RBT

链接已死
易卜拉欣

43

其设置Decimal是精度和小数位数,或者是普通语言,数字可以有多少位数,并且您希望小数点右边有几位数。

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

如果你把PIDecimal(18,2)将被记录为3.14

如果你把PIDecimal(18,10)被记录为3.1415926535


35

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


精度=>存储字节

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

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


9

你可以试试这个

decimal(18,1)

数字的长度应总计为18。小数点后的数字长度应仅为1,且不得超过该长度。


6

在MySQL中,DB decimal(4,2)仅允许输入4位数字。如您所见decimal(4,2),它表示您可以输入总共4位数字,其中两位可以保留在小数点后。

因此,如果在MySQL数据库中输入100.0,它将显示类似“列的超出范围值”的错误。

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


2
为什么在明确指定Microsoft SQL Server问题时这与此相关?
JCKödel


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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.