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

时间:2009-05-01 21:06:13

标签: sql sql-server types decimal

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

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

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

8 个答案:

答案 0 :(得分:488)

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

使用像DECIMAL(18,4)这样的东西,应该做得很好!

这会给你一个总共18位,其中4位小数点后面(和小数点前14位)。

答案 1 :(得分:123)

您应该使用如下:

DECIMAL(m,a)

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

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

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

答案 2 :(得分:41)

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

因此,如果您将PI加入Decimal(18,0),它会被记录为3吗?

如果您将PI放入Decimal(18,2),则会将其记录为3.14

如果您将PI加入Decimal(18,10),请将其记录为3.1415926535

答案 3 :(得分:31)

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

精度=>存储字节

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

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

答案 4 :(得分:6)

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

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

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

答案 5 :(得分:5)

你可以试试这个

decimal(18,1)

数字的长度应该是18。小数点后的数字长度应该只有1而不能超过。

答案 6 :(得分:3)

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

答案 7 :(得分:-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)