다음을 통해 공유


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(전체 자릿수)
    소수점 왼쪽과 오른쪽에 저장할 최대 전체 자릿수입니다. 전체 자릿수 값은 1에서 최대 전체 자릿수인 38 사이여야 합니다. 기본 전체 자릿수는 18입니다.

  • s (소수 자릿수)
    소수점 오른쪽에 저장할 소수 자릿수입니다. p에서 이 숫자를 빼서 소수점 왼쪽의 최대 자릿수가 결정됩니다. 소수점 오른쪽에 저장할 수 있는 10진수의 최대 수입니다. 소수 자릿수 값은 0에서 p 사이여야 합니다. 소수 자릿수는 전체 자릿수를 지정한 경우에만 지정할 수 있습니다. 기본 소수 자릿수는 0입니다. 따라서 0 <= s <= p입니다. 전체 자릿수에 따라 최대 저장소 크기가 달라집니다.

    전체 자릿수

    저장소 크기(바이트)

    1 - 9

    5

    10-19

    9

    20-28

    13

    29-38

    17

decimal 및 numeric 데이터 변환

decimal 및 numeric 데이터 형식의 경우 SQL Server는 전체 자릿수와 소수 자릿수의 각 특정 조합을 다른 데이터 형식으로 간주합니다. 예를 들면 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는 오버플로가 발생할 때 오류를 일으킵니다. 전체 자릿수 및 소수 자릿수의 손실만으로는 오류가 발생하지 않습니다.

float 또는 real 값을 decimal 또는 numeric으로 변환하는 경우 10진수 값은 17자리를 넘을 수 없습니다. 5E-18보다 작은 모든 float 값은 항상 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)