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

SQLServer 中的 DECIMAL 和 NUMERIC 数据类型有什么区别吗?

我应该什么时候使用十进制和什么时候使用数字?

134047 次浏览

它们是相同的。数字在功能上等同于十进制。

小数和数字

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

编辑:

对一些同事来说,这可能与 DECIMAL 作为 ANSI SQL 标准和 NUMERIC 作为微软更喜欢的编程语言有关。... 也许;)

这就是 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>.

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

-- 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

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

这里有一个小小的区别,根据 SQL For Dummies,第8版(2013) :

DECIMAL 数据类型与 NUMERIC 类似 您的实现可能指定比您的 如果指定ーー,则实现将使用更高的精度 不指定精度或比例,则实现使用默认值 值,就像它对 NUMERIC 类型所做的那样。

看起来,SQL 在 一些实现上的不同之处在于数据完整性。DECIMAL 允许基于某些系统默认值定义的内容溢出,而 NUMERIC 则不允许。

它们是完全一样的。当你使用它的时候是一致的。在你的数据库中使用它们中的一个