CUBRID 2008 R4.1 기초강좌
데이터 정의 및 타입 - 수치형 0 0 56,159

by 큐브리드 NUMERIC INTEGER SMALLINT DECIMAL FLOAT DOUBLE [2009.03.20]


데이터 정의 및 타입 - 수치형
 
1. 수치형 데이터 타입의 정의와 특성
 
1) 정의
 
수치형 데이터 타입은 정확한(exact) 형태와 근사치(approximate) 형태로 나누어 진다. 정확한 수치형 데이터 타입은 정확하고 일관된 값을 가져야 하는 경우에 사용된다. 대부분의 재무 관련 계산과 분석은 정확성을 위해 시스템이 자동적으로 유효숫자를 조정하지 못하도록 정확한 수치형 데이터 타입을 사용하는 것이 보통이다.
CUBRID가 지원하는 정확한 수치형 데이터 타입은 다음과 같다.
 
NUMERIC(혹은 DECIMAL)
 
INTEGER
 
SMALLINT
 
CUBRID가 지원하는 근사치 형태의 수치형 데이터 타입은 다음과 같다.
 
FLOAT(혹은 REAL)
 
DOUBLE PRECISION
 
MONETARY
 
NUMERIC(혹은 DECIMAL)
 
INTEGER
 
SMALLINT
 
이들 데이터 타입은 리터럴 값으로는 서로 같아도 시스템이 해석하는 값으로는 서로 다를 수 있다는 측면에서 근사치로 간주된다. 예를 들어 하나의 속성은 FLOAT로, 또 하나의 속성은 DOUBLE로 한 후, 두 속성에 같은 리터럴 값을 저장하여도 시스템이 비교할 때 서로 다르게 판단할 수 있다.
FLOAT, DOUBLE PRECISION 그리고 MONETARY를 저장하려면 각각 4, 8, 12바이트가 필요하다.
 
2) 특성
 
① 정밀도와 스케일(Precision and Scaling)
 
수치형 데이터 타입의 정밀도(precision)는 그 값이 유지할 수 있는 유효한 자릿수로 정의된다. 이는 정확한 수치형이든 근사치 수치형이든 마찬가지이다.
스케일(scale)은 소수점 이하의 자릿수를 나타내는데, 정확한 수치형에서만 의미가 있다. 정확한 수치형으로 선언된 속성은 항상 고정된 정밀도와 스케일을 갖게 된다. NUMERIC(또는 DECIMAL) 데이터 타입은 항상 최소한 한 자리의 정밀도를 갖는다. 그리고, 스케일의 범위는 0과 선언된 정밀도 사이여야 한다. 스케일이 정밀도보다 클 수는 없다. INTEGER나 SMALLINT 데이터 타입에서는 스케일은 0이고(즉, 소수점 이하가 없음), 정밀도는 시스템에 의해 고정된다.
 
② 수치형 리터럴(Numeric Literals)
 
수치형 값을 입력하기 위해서는 특별한 기호가 사용될 수 있는데, 플러스(+)는 양수를, 마이너스(-)는 음수를 나타내는 데 사용한다. 과학용 표기법이 사용될 수도 있다. 화폐 값을 표현하기 위하여 시스템에 지정된 통화 기호를 사용할 수도 있다. 수치형 리터럴로 표현 가능한 최대 정밀도는 255이다.
 
③ 수치형 변환(Numeric Coercions)
 
모든 수치형 데이터 타입은 상호 비교 가능하고, 이를 위해 서로 공통된 수치형 데이터 타입으로 자동 변환이 이루어 진다. 명시적인 변환은 CAST 연산자를 이용해야 한다. 서로 다른 수치형 데이터가 서로 정렬되거나, 수식에서 계산될 때에는 시스템에 의하여 자동으로 변환된다. 예를 들어, FLOAT 타입의 속성 값과 INTEGER 타입의 속성 값을 더하게 되면, 시스템이 자동적으로 INTEGER 속성 값을 가장 근사한 FLOAT 값으로 변환한 후 덧셈을 수행한다.
 
2. INTEGER
 
INTEGER 데이터 타입은 정확한 수치형 타입이다. 정밀도는 10이고 스케일은 0이다.
INTEGER 값은 사용하고 있는 컴퓨터 하드웨어가 가진 단어(word) 길이로 표현하도록 되어 있는데, 통상 4 바이트(32 비트)를 차지한다.
따라서, 표현할 수 있는 값의 범위는 -2147483648에서 +2147483647까지이다.
 
1) 참고 사항
 
만약, 소수점 아래 숫자가 있는 값을 INTEGER에 지정하면 소수점 뒤의 숫자는 모두 절삭된다.
 
INTEGER와 INT는 같은 의미로 사용된다.
 
2) 예제
INTEGER에 8934를 지정하면 8934가 저장됨.
INTEGER에 7823467를 지정하면 7823467이 저장됨.
INTEGER에 89.8를 지정하면 89가 저장됨(소수점 뒤의 수치는 모두 절삭됨).
INTEGER에 3458901122를 지정하면 오류가 발생함(표현 가능 범위를 초과하면 오류 발생).
 
3. SMALLINT
 
SMALLINT 데이터 타입은 정확한 수치형 타입이다. SMALLINT 데이터 타입은 정밀도가 5이고 스케일은 0이다. SMALLINT 값은 통상 2바이트(16비트)를 차지한다. 따라서, 표현할 수 있는 값의 범위는 -32768에서 +32767이다.
SMALLINT
 
1) 참고 사항
 
소수점 이하에 숫자가 있는 값을 SMALLINT에 지정하면 소수점 이하의 숫자는 모두 절삭된다.
 
2) 예제
SMALLINT에 8934를 지정하면 8934가 저장된다.
SMALLINT에 34.5를 지정하면 34가 저장된다(소수점 이하의 숫자는 모두 절삭됨).
SMALLINT에 23467를 지정하면 23467이 저장된다.
SMALLINT에 89354를 지정하면 오류가 발생한다(표현 가능 범위를 초과하면 오류 발생).
 
4. NUMERIC 또는 DECIMAL
 
NUMERIC 또는 DECIMAL 데이터 타입은 정확한 수치를 나타낸다. 다음과 같이 정밀도와 스케일을 옵션으로 지정하여 정의할 수도 있다.
정밀도 p가 생략되면 정밀도의 디폴트 값은 15, 스케일 s가 생략되면 스케일의 디폴트 값은 0이다. 정밀도의 최소값은 1이고, 최대값은 38이다.
NUMERIC과 DECIMAL, 그리고 DEC는 같은 의미로 사용된다.
NUMERIC(p, [s])
 
1) 참고 사항
 
정밀도는 반드시 스케일 이상이어야 한다.
 
정밀도보다 큰 스케일을 설정하면 오류가 발생한다.
 
2) 예제
NUMERIC에 55555.3333을 지정하면 55555가 저장됨(스케일 디폴트 값은 0이므로 소수점 뒤의 수치는 모두 절삭됨).
NUMERIC(5)에 555.33을 지정하면 555가 저장됨(스케일 디폴트 값은 0이므로 소수점 뒤의 수치는 모두 절삭됨).
NUMERIC(9,4)에 55555.3333을 지정하면 55555.3333가 저장됨.
NUMERIC(3,4)을 선언하면 오류가 발생됨 (정밀도가 스케일보다 작기 때문에 오류).
NUMERIC(4,4)에 .533333을 지정하면 .5333가 저장됨(정밀도가 4이므로 소수점 4자리 밑은 절삭됨).
 
5. FLOAT 또는 REAL
 
FLOAT(또는 REAL) 데이터 타입은 근사치 수치형 타입이다. 정밀도를 옵션으로 지정할 수 있다.
정밀도 p가 7 이하로 지정되면 단일-정밀도(single-precision) 수치로 표현된다. 만약 7보다 크고 19 이하이면 DOUBLE 데이터 타입으로 간주된다. 허용되는 값의 범위는 사용되고 있는 시스템에 따라 다를 수 있는데, 보통 ANSI/IEEE 754-1985 표준을 준수한다. 이에 따르면 -10e+38에서 +10e+38까지의 크기를 저장할 수 있고, 정규화된 수치로는 1.175494e-38에서 3.402823e+38까지 표현할 수 있다.
FLOAT는 정밀도와 스케일이 생략된 REAL과 같은 의미를 갖는다.
FLOAT(p)
 
1) 참고 사항
 
FLOAT 타입으로 표현할 수 있는 최소값부터 최대값까지의 범위는 CUBRID가 수행되는 시스템에 종속적이다. INTEGER와 달리 FLOAT는 근사치를 저장하기 때문에 비교에 사용할 때 주의해야 한다. 예를 들어, 어떤 값을 FLOAT로 변환할 수는 있으나, 그 변환된 값이 변환 전의 값과 정확히 같다고 보증할 수 없다. 따라서, FLOAT 타입의 속성에 조건을 주어 SELECT를 수행할 때에는 특정 FLOAT 값과 같은 값을 갖는 조건(즉, 등식 조건)이 아니라 범위를 갖는 조건을 주는 것이 좋다. 이 특징은 DOUBLE 타입에서도 마찬가지이다. 이것은 CUBRID만의 특징이 아니라 근사치 수치형 데이터 타입을 다루는 모든 컴퓨터의 특징이다.
 
2) 예제
FLOAT에 8934를 지정하면 8.934000e+03이 저장된다.
FLOAT(0)에 34를 지정하면 3.400000e+01이 저장된다.
FLOAT(5)에 -234.67을 지정하면 -2.346700e+02가 저장된다.
 
6. DOUBLE 또는 DOUBLE PRECISION
 
DOUBLE PRECISION 데이터 타입은 근사치 수치형 타입이다. DOUBLE PRECISION 데이터 타입은 2배의 정밀도를 갖는 부동 소수점 숫자를 갖는다.
정밀도는 자동으로 FLOAT의 정밀도보다 높은데, 허용되는 값의 범위는 FLOAT에서와 마찬가지로 사용되고 있는 시스템에 따라 다를 수 있다. 보통 ANSI/IEEE 754-1985 표준을 준수한다. 이에 따르면 -10e+308에서 +10e+308까지의 크기를 저장할 수 있고, 정규화된 수치로는 2.2250738585072014e-308에서 1.7976931348623157e+308까지 표현할 수 있다.
DOUBLE PRECISION과 DOUBLE은 같은 의미로 사용된다.
DOUBLE PRECISION
 
1) 참고 사항
 
INTEGER와 달리 DOUBLE은 근사치를 저장하기 때문에 비교에 사용될 때 그 효과를 주의해야 한다. 예를 들어, 어떤 값을 DOUBLE로 변환할 수는 있으나, 그 변환된 값이 변환 전의 값과 정확히 같다고 보증할 수 없다. 따라서, DOUBLE 타입의 속성에 조건을 주어 SELECT를 수행할 때에는 특정 DOUBLE 값과 같은 값을 갖는 조건(즉, 등식 조건)이 아니라 범위를 갖는 조건을 주는 것이 좋다. 이 특징은 앞에서 설명한 FLOAT 타입도 마찬가지이다. 이것은 CUBRID만의 특징이 아니라, 근사치 수치형 데이터 타입을 다루는 모든 컴퓨터의 특징이다.
 
DOUBLE의 유효 숫자는 15자리이다.
 
2) 예제
DOUBLE에 89.998765431132를 지정하면 8.999876543113200e+01이 저장된다.
DOUBLE에 -18.256743237573을 지정하면 -1.825674323757300e+01이 저장된다.
 
7. MONETARY
 
MONETARY 데이터 타입은 근사치 수치형 타입이다. 실제통화(currency) 종류는 시스템에 정의된 로케일에 의해 정해진다. 정밀도와 스케일은 시스템에 따라 다를 수 있는데, 보통 정밀도는 15, 스케일은 -308에서 +308까지 허용된다. 실제 허용되는 값은 범위는 DOUBLE과 같다.
MONETARY
 
1) 참고 사항
 
달러 기호나 소수점을 사용할 수도 있으나, 쉼표(,)는 사용할 수 없다.
 
2) 예제
로케일이 영문일 경우 MONETARY에 8934를 지정하면 $8,934.00이 저장된다.
 

- 강좌 URL : http://www.gurubee.net/lecture/2024

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입