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

есть ли разница между десятичными и числовыми типами данных в SQL Server?

когда я должен использовать DECIMAL и когда NUMERIC?

6 ответов


они одинаковы. Numeric функционально эквивалентен decimal.

MSDN:decimal и 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>.

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

Edit:

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


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

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

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

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


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

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

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