decimal 및 numeric(Transact-SQL)

적용 대상: Microsoft Fabric의 Microsoft FabricWarehouse에 있는 SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsPlatform System(PDW) SQL 분석 엔드포인트

고정 정밀도 및 소수 자릿수가 있는 숫자 데이터 형식입니다. 10진수와 숫자는 동의어이며 서로 교환하여 사용할 수 있습니다.

인수

decimal[ (p[ ,s] )] 및 numeric[ (p[ ,s] )]
고정 정밀도 및 배율 숫자입니다. 최대 정밀도를 사용하는 경우 유효한 값은 - 10^38 +1 ~ 10^38 - 1입니다. 10진수에 대한 ISO 동의어는 decdec(p, s)입니다. 숫자는 10진수와 기능적으로 동일합니다.

p(전체 자릿수)
저장할 최대 소수 자릿수입니다. 이 숫자에는 소수점의 왼쪽과 오른쪽이 모두 포함됩니다. 전체 자릿수 값은 1에서 최대 전체 자릿수인 38 사이여야 합니다. 기본 전체 자릿수는 18입니다.

참고 항목

Informatica는 지정된 정밀도 및 배율에 관계없이 16개의 유효 자릿수만 지원합니다.

s (scale)
소수점 오른쪽에 저장된 소수 자릿수입니다. 이 숫자는 p에서 빼서 소수점 왼쪽의 최대 자릿수를 결정합니다. 소수 자릿수는 0에서 p까지의 값이어야 하며 전체 자릿수가 지정된 경우에만 지정할 수 있습니다. 기본 소수 자릿수는 0이므로, 0 <= s<= p입니다. 전체 자릿수에 따라 최대 스토리지 크기가 달라집니다.

자릿수 스토리지 크기(바이트)
9개 항목 중 5
10-19 9
20-28 13
29-38 17

참고 항목

Informatica(SQL Server PDW Informatica Connector를 통해 연결)는 지정된 최대 자릿수 및 소수 자릿수와 상관없이 16 유효 자릿수만 지원합니다.

10진수 및 숫자 데이터 변환

decimalnumeric 데이터 형식의 경우 SQL Server는 전체 자릿수와 소수 자릿수의 각 조합을 다른 데이터 형식으로 간주합니다. 예를 들어 decimal (5,5)decimal(5,0) 은 서로 다른 데이터 형식으로 간주됩니다.

Transact-SQL 문에서 소수점이 있는 상수는 필요한 최소 전체 자릿수 및 소수 자릿수를 사용하여 numeric 데이터 값으로 자동 변환됩니다. 예를 들어 상수 12.345는 전체 자릿수가 5이고 소수 자릿수가 3인 numeric 값으로 변환됩니다.

소수점 또는 숫자에서 부동 소수점 또는 실수변환하면 정밀도가 약간 손실될 수 있습니다. int, smallint, tinyint, float, real, money 또는 smallmoney에서 decimal 또는 numeric으로 변환할 경우 오버플로가 발생할 수 있습니다.

기본적으로 SQL Server는 숫자를 전체 자릿수 및 소수 자릿수가 낮은 decimal 또는 numeric 값으로 변환할 때 반올림을 사용합니다. 반대로, SET ARITHABORT 옵션이 ON이면 SQL Server는 오버플로가 발생할 때 오류를 일으킵니다. 전체 자릿수 및 소수 자릿수의 손실만으로는 오류가 발생하지 않습니다.

SQL Server 2016(13.x) 이전에는 float 값을 decimal 또는 numeric로 변환하는 경우 정밀도 값이 17자리로 제한됩니다. 5E-18(과학적 표기법 5E-18 또는 10진 표기법 0.000000000000000005를 사용하여 설정된 경우) 미만의 float 값은 0으로 버림됩니다. SQL Server 2016(13.x)부터 더 이상 제한되지 않습니다.

예제

다음 예제에서는 소수숫자 데이터 형식을 사용하여 테이블을 만듭니다. 값은 각 열에 삽입됩니다. 결과는 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(Transact-SQL)
DECLARE @local_variable (Transact-SQL)
SET @local_variable (Transact-SQL)
sys.types(Transact-SQL)