Есть ли разница между DECIMAL и NUMERIC в SQL Server? - PullRequest
121 голосов
/ 17 апреля 2009

Есть ли разница между типами данных DECIMAL и NUMERIC в SQL Server?

Когда мне следует использовать DECIMAL, а когда NUMERIC?

Ответы [ 6 ]

101 голосов
/ 17 апреля 2009

Они одинаковы. Числовое значение функционально эквивалентно десятичному.

MSDN: десятичное и числовое

39 голосов
/ 17 апреля 2009

Это то, что тогда стандарт 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>.
11 голосов
/ 17 апреля 2009

Насколько мне известно, нет никакой разницы между ЦИФРОВЫМ и ДЕСЯТИЧНЫМ типами данных. Они являются синонимами друг другу, и любой из них может быть использован. Типы данных DECIMAL и NUMERIC - это числовые типы данных с фиксированной точностью и масштабом.

Edit:

Говоря с несколькими коллегами, возможно, это как-то связано с тем, что DECIMAL - это стандарт ANSI SQL, а NUMERIC - тот, который предпочитает Mircosoft, поскольку он чаще встречается в языках программирования. ... Может быть;)

1 голос
/ 26 августа 2017

Ответ Йоакима Бэкмана является конкретным, но это может внести дополнительную ясность в него.

Есть небольшая разница. Согласно SQL для чайников, 8-е издание (2013):

Тип данных DECIMAL аналогичен NUMERIC. ... разница в том что ваша реализация может указывать точность больше, чем вы указать - если это так, реализация использует большую точность. если ты не указывайте точность или масштаб, реализация использует значение по умолчанию значения, как это происходит с типом NUMERIC.

Кажется, что разница в некоторых реализациях SQL заключается в целостности данных. DECIMAL допускает переполнение по сравнению с тем, что определено на основе некоторых системных значений по умолчанию, в отличие от NUMERIC.

0 голосов
/ 05 сентября 2018

Они точно такие же. Когда вы используете его, будьте последовательны. Используйте один из них в вашей базе данных

0 голосов
/ 26 июля 2016

Это синонимы, без разницы вообще. Десятичные и числовые типы данных - это числовые типы данных с фиксированной точностью и масштабом.

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