SQL Server에서 DECIMAL과 NUMERIC간에 차이가 있습니까?


127

SQL Server에서 DECIMAL과 NUMERIC 데이터 형식간에 차이가 있습니까?

언제 DECIMAL을 사용해야하고 언제 NUMERIC을 사용해야합니까?

답변:


105

그들은 동일합니다. 숫자는 기능적으로 소수와 같습니다.

MSDN : 10 진수 및 숫자


4
기능적 동등성은 평등과 동일하지 않습니다. 실제로 MS6232A 과정의 강사 슬라이드에는 거의 동일하다는 의견이 추가되었습니다. 동시에 Microsoft는 서로에 대해 권장하지 않습니다 (그러나 DECIMAL은 Sybase의 레거시 데이터 유형 대신 표준 데이터 유형이므로 더 의미가 있습니다). 여전히 (스크린 뒤의) 실제 차이점이 무엇인지 궁금합니다 :-).
vstrien

22
@vstrien : 내가 찾을 수있는 유일한 차이점은 SQL-92 표준에 있다는 것입니다 decimal입니다 정확히 동안 선언 한 정확한 numeric입니다 적어도 선언 정확한한다. SQL Server에서는 둘 다 선언 된대로 정확합니다. 즉 numeric표준에서 허용 하는 유연성을 사용하지 않습니다 .
Guffa

17
그러나 예를 들어 "DECIMAL (18,0)"형식의 "부모"열이 있고 외부 키 를 참조 하려는 경우 외래 키 를 추가하려고하면 SQL Server는 이들을 상호 교환 가능한 것으로 취급하지 않습니다 . "NUMERIC (18,0)"형식의 열에서 오류가 발생 Column '<referencedColumn>' is not the same data type as referencing column '<parentTable>.<parentColumn>' in foreign key '<yourKeyName>'합니다. 모두 NUMERIC (x, y) 또는 DECIMAL (x, y)
여야

7
@ 구파 : 귀하의 답변은 stackoverflow.com/a/759606/14731에 인용 된 SQL2003 표준과 모순 됩니다. 구체적 decimal이고 적어도 반면 선언 등으로 정밀 numeric하다 정확히 선언 정확한한다.
길리

3
@ 길리 : 예, 원본 자료를 검토 한 결과, 내가 그것들을 교환 한 것이 옳은 것 같습니다.
Guffa

41

이것이 바로 SQL2003 표준 (6.16.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>.

이것에 대한 링크가 있습니까?
gbn

2
Wiscorp는 최종 버전을 구매해야하는 경우 다운로드 용 표준 버전 ( wiscorp.com/sql_2003_standard.zip )을 가지고 있습니다 ( en.wikipedia.org/wiki/SQL2003#Documentation_availability ).
Joakim Backman

6
이는 SQL Server가 표준을 구현하는 방법에 대한 설명이 아니라 SQL 표준입니다.
Guffa

2
이것이 마이크로 소프트가 무시하기로 결정한 또 다른 규칙이라는 것을 알게되어 기쁘다. :)
one.beat.consumer

11

내 지식으로는 NUMERIC과 DECIMAL 데이터 유형 사이에는 차이가 없습니다. 그들은 서로 동의어이며 둘 중 하나를 사용할 수 있습니다. DECIMAL 및 NUMERIC 데이터 유형은 고정밀도 및 스케일을 가진 숫자 데이터 유형입니다.

편집하다:

몇몇 동료들과 이야기하는 것은 아마도 DECIMAL이 ANSI SQL 표준이고 NUMERIC이 프로그래밍 언어에서 더 일반적으로 발견되는 것과 같은 Mircosoft가 선호하는 것과 관련이 있습니다. ...아마도 ;)


편집 : 아니오-위의 @JoakimBackman의 답변 참조-그는 NUMERIC과 DECIMAL을 모두 사용하여 SQL 표준을 인용합니다.
리버스 엔지니어

1

십진수 및 숫자 데이터 형식은 고정밀도 및 스케일이 고정 된 숫자 데이터 형식입니다.

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

1

Joakim Backman의 답변은 구체적이지만 더 명확 할 수 있습니다.

약간의 차이가 있습니다. SQL For Dummies, 8 판 (2013)에 따라 :

DECIMAL 데이터 유형은 NUMERIC과 유사합니다. ... 차이점은 구현시 사용자가 지정한 것보다 더 큰 정밀도를 지정할 수 있다는 것입니다. 그렇다면 구현시 더 큰 정밀도를 사용합니다. 정밀도 또는 스케일을 지정하지 않으면 구현은 NUMERIC 유형과 마찬가지로 기본값을 사용합니다.

일부 SQL 구현의 차이점 은 데이터 무결성 에있는 것 같습니다 . DECIMAL은 NUMERIC이 아닌 일부 시스템 기본값을 기반으로 정의 된 것에서 오버플로를 허용합니다.


-2

그들은 정확히 같습니다. 사용할 때 일관성이 있습니다. 데이터베이스에서 그중 하나를 사용하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.