decimal 型と numeric 型 (Transact-SQL)
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス
decimal と numeric は、固定の有効桁数と小数点以下桁数を持つ数値データ型です。 decimal と numeric はシノニムであり、同じ意味で使用できます。
引数
decimal [ ( p [ , s ] ) ] と numeric [ ( p [ , s ] ) ]
固定長の有効桁数と小数点以下保持桁数です。 最大有効桁数を使用する場合、有効な値は次の値から -10^38 + 1
取得されます 10^38 - 1
。 decimal の ISO シノニムは、dec と dec(p,s) です。 numeric は機能的には decimal と同じです。
p (有効桁数)
格納される 10 進数の桁数の最大合計数。 この数には、小数点の左側と右側の両方が含まれます。 有効桁数の値は、1 - 38 (最大有効桁数) にする必要があります。 既定の有効桁数は 18 です。
Note
Informatica では、有効桁数と小数点以下桁数の指定に関係なく、16 の有効桁数のみサポートされます。
s (scale)
小数点の右側の保存される桁数です。 この数値が p から差し引かれ、小数点の左側の最大桁数が判別されます。 小数点以下桁数は、0 から p の範囲の値である必要があり、有効桁数が指定されている場合にのみ指定できます。 既定のスケールは 0
、次の値になります 0 <= s <= p
。 ストレージの最大サイズは有効桁数によって異なります。
Precision | ストレージのバイト数 |
---|---|
1 - 9 | 5 |
10 から 19 | 9 |
20 から 28 | 13 |
29 から 38 | 17 |
Note
Informatica (SQL Server PDW Informatica コネクタをによって接続されます) は、有効桁数と小数点以下桁数の指定に関係なく、16 桁の有効桁数のみをサポートします。
10 進データと数値データの変換
decimal データ型と numeric データ型の場合、SQL Server では、有効桁数と小数点以下桁数の組み合わせが異なる場合は、異なるデータ型と見なされます。 たとえば、decimal(5,5) と decimal(5,0) は異なるデータ型と見なされます。
Transact-SQL ステートメントでは、小数点の付いた定数は、必要最小限の有効桁数と小数点以下桁数で自動的に numeric 型の値に変換されます。 たとえば、定数12.345
は、有効桁数が 〗、小数点以下3
桁数5
が 1 の数値に変換されます。
変換 ( | への変換 | コンバージョン リスク |
---|---|---|
decimal および numeric | float または real | 精度が失われる可能性があります |
int、smallint、tinyint、float、real、money、または smallmoney | decimal および numeric | オーバーフローの可能性 |
SQL Server では、既定で、数値を decimal 型または numeric 型の値に変換する場合、有効桁数と小数点以下桁数が少なくなって丸められます。 逆に、オプションが指定されている SET ARITHABORT
場合、 ON
オーバーフローが発生すると SQL Server によってエラーが発生します。 有効桁数と小数点以下桁数が失われただけではエラーは生成されません。
SQL Server 2016 (13.x) より前では、float 値から 10 進数または数値への変換は、有効桁数 17 桁の値のみに制限されます。 (指数表記または 10 進表記を5E-18
使用して設定した場合) より5E-18
小さい浮動小数点値は、次の0.000000000000000005
値に0
切り下げられます。 この制限は、SQL Server 2016 (13.x) 以降のバージョンでは表示されません。
例
次の例では、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
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示