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
ただし、SQL Serverはそれらを交換可能として処理しないことに注意してください。たとえば、「DECIMAL(18,0)」形式の「親」列があり、それを参照する外部キーを追加しようとした場合列が「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)である必要があります
Doug_Ivison

7
@Guffa:あなたの答えは、stackoverflow.com / a / 759606/14731で引用されているSQL2003標準と矛盾します。具体的にdecimal、少なくとも宣言numeric同じくらい正確ですが、宣言と同じくらい正確です。
ギリ14

3
@ギリ:はい、元の資料のレビューで、私がそれらを交換したのは正しいようです。
Guffa 14

41

これは、SQL2003標準(§6.1データ型)がこの2つについて述べていることです。

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

2
Wiscorpには、ダウンロード用の標準のドラフトバージョン(wiscorp.com/sql_2003_standard.zip)があります。最終版が必要な場合は、購入する必要があります(en.wikipedia.org/wiki/SQL2003#Documentation_availability)。
ジョアキムバックマン

6
これはSQL標準であり、SQL Serverによる実装方法の説明ではないことに注意してください。
グッファ

2
これは、Microsoftが無視することに決めたもう1つのルールであることを知っておくと便利です。:)
one.beat.consumer 2015

11

私の知る限りでは、NUMERICデータ型とDECIMALデータ型の間に違いはありません。これらは互いに同義であり、どちらか一方を使用できます。DECIMALおよびNUMERICデータ型は、固定の精度と位取りを持つ数値データ型です。

編集:

いくつかの同僚と話すと、それはおそらくDECIMALがANSI SQL標準であり、NUMERICがMircosoftがプログラミング言語でより一般的に見られるものとして好んでいるものの1つであることと関係があります。...多分 ;)


編集について:いいえ、上記の@JoakimBackmanの回答を参照してください-彼はSQL標準をNUMERICとDECIMALの両方で引用しています。
リバースエンジニア

1

それらは同義語であり、まったく違いはありません.10進数と数値のデータ型は、固定精度と位取りを持つ数値データ型です。

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

それらはまったく同じです。使用するときは一貫してください。それらの1つをデータベースで使用します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.