数据库字段定义

时间:2010-07-15 14:39:19

标签: sql database oracle

我需要从数据库进行数据迁移,而且我不太熟悉数据库,所以我想澄清一下。我有一些文档可以应用于Oracle或SQL数据库,它有一个列定义为NUMBER(10,5)。我想知道这意味着什么。我认为这意味着该数字有10位数,小数点后有5位,但我想澄清一下。对于SQL还是Oracle,这也会有所不同吗?

3 个答案:

答案 0 :(得分:4)

第一个数字是精度,第二个数字是比例。 SQL Server中的等效项可以是Decimal / Numeric,您可以这样定义它:

DECLARE @MyDec decimal(18,2)

18是可以存储的最大小数位数(即总位数,例如123.45,此处的精度为5,而小数位数为2)。 2是刻度,它指定存储在小数点右侧的最大位数。

请参阅this article

请记住,存储字节越大,精度越高。所以尽可能保持最低限度。

  

p(精度)

     

指定的最大总数   可以存储的十进制数字,   在左边和右边   小数点。精度必须   是从1到最大值的值   精确。最高精度是   38.默认精度为18。

     

s(规模)

     

指定的最大数量   可存储的十进制数字   小数点右边。规模   必须是从0到p的值。   只有在可以指定比例时   指定精度。默认   比例为0;因此,0 <= s <= p。   最大存储容量因基于而异   精度。

最后,值得一提的是,在oracle中你可以定义一个大于精度的比例,例如Number(3,10)在oracle中是有效的。另一方面,SQL Server要求精度&gt; = scale。因此,如果您在oracle中定义了Number(3,10),它将映射到sql为Number(10,10)。

答案 1 :(得分:1)

在Oracle中,定义为NUMBER(4,5)的列要求小数点后第一个数字为零,并将所有值舍入小数点后的第五个数字。

来自Oracle documentation

NUMBER(p,s)
  

其中:p是精度,或者是   总位数。神谕   保证数字的可移植性   精度范围从1到38. s   是比例或数字的数字   小数点右侧。该   比例范围可以从-84到127。

以下是一些例子:

.000127中存储的实际数据NUMBER(4,5)变为.00013

7456123.89中存储的实际数据NUMBER(7,-2)变为7456100

<强>被修改

JonH提到一些值得注意的事情:

  

Oracle允许比例&gt;精确,   因此,如果s&gt; p,SQL将映射它   然后p成为s。那是NUMBER(3,4)   in oracle在SQL中变为NUMERIC(4,4)。

答案 2 :(得分:1)

在Oracle中将列定义为NUMBER(10,5)意味着列值可以具有最多五个精度位的小数,以及总长度的十位数。如果在未定义任何小数位的列中插入值,则列支持的最大值为10位。例如,定义为NUMBER(10,5)的列支持这些值:

1234567890
 12345.67890

它使验证成为一种痛苦。

MySQL和SQL Server不支持NUMBER数据类型 - 为了支持小数,你正在使用DECIMAL(或FLOAT?)。我没有看过PostgreSQL,但我认为它与Oracle类似。