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 シノニムは、dec と dec(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

decimal 型データと numeric 型データの変換

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

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

decimal 型または numeric 型から float 型または real 型に変換する場合、有効桁数がある程度失われる場合があります。 int、smallint、tinyint、float、real、money、または smallmoney を decimal または 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)

関連項目

参照

ALTER TABLE (Transact-SQL)

CAST および CONVERT (Transact-SQL)

CREATE TABLE (SQL Server)

DECLARE @local\_variable (Transact-SQL)

SET @local\_variable (Transact-SQL)

sys.types (Transact-SQL)