숫자형 - Amazon Redshift

숫자형

숫자 데이터 형식으로는 정수, 소수 및 부동 소수점 수가 있습니다.

정수 형식

SMALLINT, INTEGER 및 BIGINT 데이터 형식을 사용하여 다양한 범위의 정수를 저장합니다. 각 형식마다 허용 범위를 벗어나는 값은 저장할 수 없습니다.

명칭 스토리지 Range
SMALLINT 또는 INT2 2 bytes 2 bytes
INTEGER, INT 또는 INT4 4 bytes 4 bytes
BIGINT 또는 INT8 8 bytes 8 bytes

DECIMAL 또는 NUMERIC 형식

소수 또는 숫자 데이터 형식을 사용하여 사용자 정의 정밀도가 포함된 값을 저장합니다. 여기에서 소수와 숫자 키워드는 동일한 의미로 통용됩니다. 하지만 본 문서에서는 소수가 이 데이터 형식에서 우선적으로 사용되는 용어입니다. 실제로 숫자는 일반적으로 정수, 소수 및 부동 소수점 데이터 형식을 일컬을 때 사용됩니다.

스토리지 Range
가변적, 비압축 소수 형식인 경우 최대 128비트 최대 38자리 정밀도의 128비트 부호화 정수

테이블에서 DECIMAL 열은 precisionscale을 지정하여 다음과 같이 정의합니다.

decimal(precision, scale)
precision

정수에서 전체 유효 자릿수, 즉 소수점 양변의 자릿수를 말합니다. 예를 들어 숫자 48.2891의 정밀도는 6이고, 소수점 자릿수는 4입니다. 정밀도를 따로 지정하지 않을 경우 기본 정밀도는 18입니다. 최대 정밀도는 38입니다.

입력 값에서 소수점 왼쪽의 자릿수가 열 정밀도에서 소수점 자릿수를 뺀 값보다 큰 경우에는 값을 열에 복사하거나, 삽입하거나 혹은 업데이트할 수 없습니다. 이 규칙은 열 정의의 범위를 벗어나는 모든 값에 적용됩니다. 예를 들어 numeric(5,2) 열에서는 허용되는 값의 범위가 -999.99~999.99입니다.

사용

값의 소수부, 즉 소수점 오른쪽의 소수 자릿수를 말합니다. 정수는 소수 자릿수가 0입니다. 열 명세에서 소수점 자릿수 값은 정밀도 값보다 작거나 같아야 합니다. 소수점 자릿수를 따로 지정하지 않을 경우 기본 소수점 자릿수는 18입니다. 최대 소수점 자릿수는 37입니다.

테이블에 로드되는 입력 값의 소수점 자릿수가 열의 소수점 자릿수보다 큰 경우에는 값이 지정한 자릿수로 반올림됩니다. 예를 들어 SALES 테이블의 PRICEPAID 열이 DECIMAL(8,2) 열이라고 가정하겠습니다. 이때 DECIMAL(8,4) 값이 PRICEPAID 열에 삽입되면 값의 소수점 자릿수가 2로 반올림됩니다.

insert into sales values (0, 8, 1, 1, 2000, 14, 5, 4323.8951, 11.00, null); select pricepaid, salesid from sales where salesid=0; pricepaid | salesid -----------+--------- 4323.90 | 0 (1 row)

하지만 테이블에서 선택한 값의 명시적인 변환 결과는 반올림되지 않습니다.

참고

DECIMAL(19,0) 열에 삽입할 수 있는 최대 양의 값은 9223372036854775807(263 -1)입니다. 음의 최댓값은 -9223372036854775807입니다. 예를 들어 9999999999999999999(9 19개) 값을 삽입하려고 하면 오버플로우 오류가 발생합니다. 소수점 위치에 상관없이 Amazon Redshift에서 DECIMAL 숫자로 표현할 수 있는 가장 큰 문자열은 9223372036854775807입니다. 예를 들어 DECIMAL(19,18) 열에 로드할 수 있는 가장 큰 값은 9.223372036854775807입니다.

유효 자릿수가 19자리 이하인 DECIMAL 값은 내부적으로 8바이트 정수로 저장되지만, 유효 자릿수가 20~38자리인 DECIMAL 값은 16바이트 정수로 저장되기 때문에 이러한 규칙이 적용됩니다.

128비트 DECIMAL 또는 NUMERIC 열 사용에 대한 주의 사항

애플리케이션에 해당 전체 자릿수가 필요한지 확실하지 않은 경우 DECIMAL 열에 최대 전체 자릿수를 임의로 지정하지 않도록 합니다. 128비트 값은 64비트 값보다 두 배 많은 디스크 공간을 사용하므로 쿼리 실행 시간이 느려질 수 있습니다.

부동 소수점 형식

REAL 및 DOUBLE PRECISION 데이터 형식을 사용하여 가변 정밀도의 숫자 값을 저장합니다. 부동 소수점 형식은 부정확합니다. 이 말은 일부 값이 근사치로 저장되어 특정 값을 저장하거나 반환할 때 약간 불일치가 발생할 수 있다는 것을 의미합니다. 따라서 정확한 저장 및 계산이 필요하다면(금전적 액수 등) DECIMAL 데이터 형식을 사용하십시오.

REAL은 이진 부동 소수점 산술에 대한 IEEE 표준 754에 따른 단정밀도 부동 소수점 형식을 나타냅니다. 정밀도는 약 6자리이며 범위는 약 1E-37~1E+37입니다. 이 데이터 유형을 FLOAT4로 지정할 수도 있습니다.

DOUBLE PRECISION은 이진 부동 소수점 산술에 대한 IEEE 표준 754에 따른 배정밀도 부동 소수점 형식을 나타냅니다. 정밀도는 약 15자리이며 범위는 약 1E-307~1E+308입니다. 이 데이터 유형을 FLOAT 또는 FLOAT8로 지정할 수도 있습니다.

부동 소수점 유형에는 일반 숫자 값 외에도 몇 가지 특수 값이 있습니다. SQL에서 이러한 값을 사용할 때는 다음 값 주위에 작은따옴표를 사용하세요.

  • NaN – 숫자가 아님

  • Infinity - 무한대

  • -Infinity - 음의 무한대

예를 들어, customer_activity 테이블의 day_charge 열에 숫자가 아닌 항목을 삽입하려면 다음 SQL을 실행합니다.

insert into customer_activity(day_charge) values('NaN');