decimal 및 numeric(Transact-SQL)decimal and numeric (Transact-SQL)

적용 대상: 예SQL Server 예Azure SQL Database 예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure 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의 동의어는 decdec( p, s ) 입니다.The ISO synonyms for decimal are dec and dec(p, s). numericdecimal과 기능적으로 동일합니다.numeric is functionally identical to decimal.

p(전체 자릿수)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 (소수 자릿수)s (scale)
소수점 오른쪽에 저장되는 10진 숫자 수입니다.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 Connector를 통해 연결)는 지정된 최대 자릿수 및 소수 자릿수와 상관없이 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

decimalnumeric 데이터 형식의 경우 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. int, smallint, tinyint, float, real, money 또는 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(과학적 표기법 5E-18 또는 10진 표기법 0.0000000000000000050000000000000005를 사용하여 설정된 경우) 미만의 float 값은 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

다음 예에서는 decimalnumeric 데이터 형식을 사용하여 테이블을 만듭니다.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&#40;Transact-SQL&#41;DECLARE @local_variable (Transact-SQL)
SET @local_variable&#40;Transact-SQL&#41;SET @local_variable (Transact-SQL)
sys.types(Transact-SQL)sys.types (Transact-SQL)