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

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database○Azure SQL Data Warehouse ○Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse 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] )] および 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 equivalent to decimal.

p (precision)p (precision)
小数点の右側および左側にある保存される最大文字 (数字) 数の合計です。The maximum total number of decimal digits that will be stored, both to the left and to the right 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 will be 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. 小数点以下桁数は、有効桁数が指定された場合にのみ指定できます。Scale can be specified only if precision is specified. 既定の小数点以下桁数は 0 です。したがって、0 <= s <= p になります。The default scale is 0; therefore, 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

SQL ServerSQL Server では、decimal データ型と numeric データ型の場合、有効桁数と小数点以下桁数の組み合わせが異なる場合は、異なるデータ型と見なされます。For the decimal and numeric data types, SQL ServerSQL Server considers each specific 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 はエラーを生成します。However, if the SET ARITHABORT option is ON, SQL ServerSQL Server raises an error when overflow occurs. 有効桁数と小数点以下桁数が失われただけではエラーは生成されません。Loss of only precision and scale is not sufficient to raise an error.

浮動小数値または実数値を小数値または数値に変換する場合、小数値が 17 桁を超えることはありません。When converting float or real values to decimal or numeric, the decimal value will never have more than 17 decimals. すべての浮動小数値 < 5E-18 は常に 0 として変換されます。Any float value < 5E-18 will always convert as 0.

使用例Examples

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