decimal 型と numeric 型 (Transact-SQL)decimal and numeric (Transact-SQL)

適用対象: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

固定長の有効桁数と小数点以下保持桁数を持つ数値データ型です。Numeric data types that have fixed precision and scale. decimal と numeric は同義であり、どちらを使ってもかまいません。Decimal and numeric are synonyms and can be used interchangeably.

引数Arguments

decimal[ ( p[ , s] ) ] and numeric[ ( p[ , s] ) ]decimal[ (p[ ,s] )] and numeric[ (p[ ,s] )]
固定長の有効桁数と小数点以下保持桁数です。Fixed precision and scale numbers. 最大有効桁数を使用した場合、有効値は - 10^38 +1 から 10^38 - 1 です。When maximum precision is used, valid values are from - 10^38 +1 through 10^38 - 1. decimal の ISO のシノニムは、dec および dec( p, s ) です。The ISO synonyms for decimal are dec and dec(p, s). numeric は機能的には decimal と同じです。numeric is functionally identical to decimal.

p (precision)p (precision)
格納される 10 進数の桁数の最大合計数。The maximum total number of decimal digits to be stored. この数には、小数点の左側と右側の両方が含まれます。This number includes both the left and the right sides of the decimal point. 有効桁数の値は、1 - 38 (最大有効桁数) にする必要があります。The precision must be a value from 1 through the maximum precision of 38. 既定の有効桁数は 18 です。The default precision is 18.

注意

Informatica では、有効桁数と小数点以下桁数の指定に関係なく、16 の有効桁数のみサポートされます。Informatica only supports 16 significant digits, regardless of the precision and scale specified.

s (scale)s (scale)
小数点の右側の保存される桁数です。The number of decimal digits that are stored to the right of the decimal point. この数値が p から差し引かれ、小数点の左側の最大桁数が判別されます。This number is subtracted from p to determine the maximum number of digits to the left of the decimal point. 小数点以下桁数は、0 から p の範囲の値である必要があり、有効桁数が指定されている場合にのみ指定できます。Scale must be a value from 0 through p, and can only be specified if precision is specified. 既定の小数点以下桁数は 0 です。したがって、0 <= s <= p になります。The default scale is 0 and so 0 <= s <= p. ストレージの最大サイズは有効桁数によって異なります。Maximum storage sizes vary, based on the precision.

有効桁数Precision ストレージのバイト数Storage bytes
1 - 91 - 9 55
10 から 1910-19 99
20 から 2820-28 1313
29 から 3829-38 1717

注意

Informatica (SQL Server PDW Informatica コネクタをによって接続されます) は、有効桁数と小数点以下桁数の指定に関係なく、16 桁の有効桁数のみをサポートします。Informatica (connected through the SQL Server PDW Informatica Connector) only supports 16 significant digits, regardless of the precision and scale specified.

decimal 型データと numeric 型データの変換Converting decimal and numeric data

decimal データ型と numeric データ型の場合、SQL ServerSQL Server では、有効桁数と小数点以下桁数の組み合わせが異なる場合は、異なるデータ型と見なされます。For decimal and numeric data types, SQL ServerSQL Server considers each combination of precision and scale as a different data type. たとえば、decimal(5,5)decimal(5,0) は異なるデータ型と見なされます。For example, decimal(5,5) and decimal(5,0) are considered different data types.

Transact-SQLTransact-SQL ステートメントでは、小数点の付いた定数は、必要最小限の有効桁数と小数点以下桁数で自動的に numeric 型の値に変換されます。In Transact-SQLTransact-SQL statements, a constant with a decimal point is automatically converted into a numeric data value, using the minimum precision and scale necessary. たとえば、定数 12.345 は有効桁数が 5、小数点以下桁数が 3 の numeric 型に変換されます。For example, the constant 12.345 is converted into a numeric value with a precision of 5 and a scale of 3.

decimal または numeric から float または real への変換では、ある程度の有効桁数の損失が発生することがあります。Converting from decimal or numeric to float or real can cause some loss of precision. intsmallinttinyintfloatrealmoney、または smallmoney から decimal または numeric への変換では、オーバーフローが発生することがあります。Converting from int, smallint, tinyint, float, real, money, or smallmoney to either decimal or numeric can cause overflow.

SQL ServerSQL Server では、既定で、数値を decimal 型または numeric 型の値に変換する場合、有効桁数と小数点以下桁数が少なくなって丸められます。By default, SQL ServerSQL Server uses rounding when converting a number to a decimal or numeric value with a lower precision and scale. 反対に、SET ARITHABORT オプションが ON に設定されている場合は、オーバーフローが起こると SQL ServerSQL Server ではエラーが生成されます。Conversely, if the SET ARITHABORT option is ON, SQL ServerSQL Server raises an error when overflow occurs. 有効桁数と小数点以下桁数が失われただけではエラーは生成されません。Loss of only precision and scale isn't sufficient to raise an error.

SQL Server 2016 (13.x)SQL Server 2016 (13.x) より前では、float 値から decimal または numeric への変換は、有効桁数 17 桁までの値に制限されます。Prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x), conversion of float values to decimal or numeric is restricted to values of precision 17 digits only. 5E-18 未満の float 値はすべて (5E-18 の科学的記数法または 0.0000000000000000050000000000000005 の小数点表記のいずれかを使用して設定されている場合) 0 に丸められます。Any float value less than 5E-18 (when set using either the scientific notation of 5E-18 or the decimal notation of 0.0000000000000000050000000000000005) rounds down to 0. これは SQL Server 2016 (13.x)SQL Server 2016 (13.x) の時点で制限がなくなりました。This is no longer a restriction as of SQL Server 2016 (13.x)SQL Server 2016 (13.x).

使用例Examples

次の例では、decimal および numeric データ型を使用してテーブルを作成します。The following example creates a table using the decimal and numeric data types. 各列に値が挿入されます。Values are inserted into each column. 結果は、SELECT ステートメントを使用して返されます。The results are returned by using a SELECT statement.

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;  
  

以下に結果セットを示します。Here is the result set.

MyDecimalColumn                         MyNumericColumn  
--------------------------------------- ---------------------------------------  
123.00                                  12345.12000  
  
(1 row(s) affected)  
  

参照See also

ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)
CAST および CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)SET @local_variable (Transact-SQL)
sys.types (Transact-SQL)sys.types (Transact-SQL)