この記事の英語版を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

decimal 型と numeric 型 (Transact-SQL)

固定長の有効桁数と小数点以下桁数を持つ数値データ型です。

適用対象: SQL Server (SQL Server 2008 から現在のバージョンまで)、Windows Azure SQL データベース (初回のリリースから現在のバージョンまで)

decimal [ (p[ ,s] )] および numeric[ (p[ ,s] )]

固定長の有効桁数と小数点以下桁数を持つ数値です。 最大有効桁数を使用した場合、有効値は - 10^38 +1 ~ 10^38 - 1 です。 decimal の ISO シノニムは、decdec(p, s) です。 numeric decimal は機能的に等価です。

p (precision)

小数点の右側および左側にある保存される最大文字 (数字) 数の合計です。 有効桁数の値は、1 ~ 38 (最大有効桁数) にする必要があります。 既定の有効桁数は 18 です。

s (scale)

小数点の右側にある保存される文字 (数字) 数です。 この数値が p から差し引かれ、小数点の左側の最大桁数が判別されます。 小数点の右側にある保存できる最大文字 (数字) 数です。 小数点以下桁数は、0 から p までの値でなければなりません。 小数点以下桁数は、有効桁数が指定された場合にのみ指定できます。 既定の小数点以下桁数は 0 です。したがって、0 <= s <= p になります。 ストレージの最大サイズは有効桁数によって異なります。

有効桁数

ストレージのバイト サイズ

1 - 9

5

10-19

9

20-28

13

29-38

17

SQL Server では、decimal 型と numeric 型の場合、有効桁数と小数点以下桁数の組み合わせが異なる場合は、異なるデータ型と見なされます。 たとえば、decimal(5,5)decimal(5,0) は異なるデータ型と見なされます。

Transact-SQL ステートメントでは、小数点の付いた定数は、必要最小限の有効桁数と小数点以下桁数で自動的に numeric 型の値に変換されます。 たとえば、定数 12.345 は有効桁数が 5、小数点以下桁数が 3 の numeric 型に変換されます。

decimal 型または numeric 型から float 型または real 型に変換する場合、有効桁数がある程度失われる場合があります。 int smallinttinyintfloatrealmoney、または smallmoneydecimal または numeric のいずれかに変換すると、オーバーフローが発生する場合があります。

SQL Server では、既定で、数値を decimal 型または numeric 型の値に変換する場合、有効桁数と小数点以下桁数が少なくなって丸められます。 ただし、SET ARITHABORT オプションが ON に設定されている場合は、オーバーフローが起こると SQL Server はエラーを生成します。 有効桁数と小数点以下桁数が失われただけではエラーは生成されません。

浮動小数値または実数値を小数値または数値に変換する場合、小数値が 17 桁を超えることはありません。 すべての浮動小数値 < 5E-18 は常に 0 として変換されます。

次の例では、decimal および numeric データ型を使用してテーブルを作成します。 値は各列に挿入され、結果は SELECT ステートメントを使用して返されます。

CREATE TABLE dbo.MyTable
(
  MyDecimalColumn decimal(5,2)
 ,MyNumericColumn numeric(10,5)

);

GO
INSERT INTO dbo.MyTable VALUES (123, 12345.12);
GO
SELECT MyDecimalColumn, MyNumericColumn
FROM dbo.MyTable;

以下に結果セットを示します。

MyDecimalColumn                         MyNumericColumn
--------------------------------------- ---------------------------------------
123.00                                  12345.12000

(1 row(s) affected)
表示: