SQL Server中的DECIMAL和NUMERIC有什么区别吗?

时间:2009-04-17 07:38:20

标签: sql-server sqldatatypes

SQL Server中的DECIMAL和NUMERIC数据类型之间有什么区别吗?

我什么时候应该使用DECIMAL和NUMERIC?

6 个答案:

答案 0 :(得分:101)

他们是一样的。数字在功能上等同于十进制。

MSDN:decimal and numeric

答案 1 :(得分:39)

这就是SQL2003标准(第6.1节数据类型)关于这两者的说法:

 <exact numeric type> ::=
    NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
  | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
  | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
  | SMALLINT
  | INTEGER
  | INT
  | BIGINT

 ...

21) NUMERIC specifies the data type
    exact numeric, with the decimal
    precision and scale specified by the
    <precision> and <scale>.

22) DECIMAL specifies the data type
    exact numeric, with the decimal scale
    specified by the <scale> and the
    implementation-defined decimal
    precision equal to or greater than the
    value of the specified <precision>.

答案 2 :(得分:11)

据我所知,NUMERIC和DECIMAL数据类型没有区别。它们是彼此的同义词,任何一个都可以使用。 DECIMAL和NUMERIC数据类型是具有固定精度和比例的数字数据类型。

编辑:

对一些同事说,也许它与DECIMAL是ANSI SQL标准有关,而NUMERIC是Mircosoft更喜欢的编程语言中常见的。 ......也许;)

答案 3 :(得分:1)

Joakim Backman的答案是具体的,但这可能会带来更多的清晰度。

存在细微差别。根据SQL For Dummies,第8版(2013):

  

DECIMAL数据类型与NUMERIC类似。 ......区别在于   您的实现可能指定的精度大于您的精度   指定 - 如果是,则实现使用更高的精度。如果你   不指定精度或比例,实现使用默认值   值,与NUMERIC类型一样。

似乎SQL的某些实现的差异在于数据完整性。 DECIMAL允许根据某些系统默认值定义溢出,而NUMERIC则不允许溢出。

答案 4 :(得分:0)

它们是同义词,完全没有区别。十进制和数字数据类型是具有固定精度和比例的数字数据类型。

-- Initialize a variable, give it a data type and an initial value

declare @myvar as decimal(18,8) or numeric(18,8)----- 9 bytes needed

-- Increse that the vaue by 1

set @myvar = 123456.7

--Retrieve that value

select @myvar as myVariable

答案 5 :(得分:-2)

它们完全相同。使用时要保持一致。在您的数据库中使用其中之一