|
||
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) 예제 | ||
|
||
3. SMALLINT | ||
SMALLINT 데이터 타입은 정확한 수치형 타입이다. SMALLINT 데이터 타입은 정밀도가 5이고 스케일은 0이다. SMALLINT 값은 통상 2바이트(16비트)를 차지한다. 따라서, 표현할 수 있는 값의 범위는 -32768에서 +32767이다. | ||
|
||
1) 참고 사항 | ||
소수점 이하에 숫자가 있는 값을 SMALLINT에 지정하면 소수점 이하의 숫자는 모두 절삭된다. | ||
2) 예제 | ||
|
||
4. NUMERIC 또는 DECIMAL | ||
NUMERIC 또는 DECIMAL 데이터 타입은 정확한 수치를 나타낸다. 다음과 같이 정밀도와 스케일을 옵션으로 지정하여 정의할 수도 있다. 정밀도 p가 생략되면 정밀도의 디폴트 값은 15, 스케일 s가 생략되면 스케일의 디폴트 값은 0이다. 정밀도의 최소값은 1이고, 최대값은 38이다. NUMERIC과 DECIMAL, 그리고 DEC는 같은 의미로 사용된다. |
||
|
||
1) 참고 사항 | ||
정밀도는 반드시 스케일 이상이어야 한다. | ||
정밀도보다 큰 스케일을 설정하면 오류가 발생한다. | ||
2) 예제 | ||
|
||
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과 같은 의미를 갖는다. |
||
|
||
1) 참고 사항 | ||
FLOAT 타입으로 표현할 수 있는 최소값부터 최대값까지의 범위는 CUBRID가 수행되는 시스템에 종속적이다. INTEGER와 달리 FLOAT는 근사치를 저장하기 때문에 비교에 사용할 때 주의해야 한다. 예를 들어, 어떤 값을 FLOAT로 변환할 수는 있으나, 그 변환된 값이 변환 전의 값과 정확히 같다고 보증할 수 없다. 따라서, FLOAT 타입의 속성에 조건을 주어 SELECT를 수행할 때에는 특정 FLOAT 값과 같은 값을 갖는 조건(즉, 등식 조건)이 아니라 범위를 갖는 조건을 주는 것이 좋다. 이 특징은 DOUBLE 타입에서도 마찬가지이다. 이것은 CUBRID만의 특징이 아니라 근사치 수치형 데이터 타입을 다루는 모든 컴퓨터의 특징이다. | ||
2) 예제 | ||
|
||
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은 같은 의미로 사용된다. |
||
|
||
1) 참고 사항 | ||
INTEGER와 달리 DOUBLE은 근사치를 저장하기 때문에 비교에 사용될 때 그 효과를 주의해야 한다. 예를 들어, 어떤 값을 DOUBLE로 변환할 수는 있으나, 그 변환된 값이 변환 전의 값과 정확히 같다고 보증할 수 없다. 따라서, DOUBLE 타입의 속성에 조건을 주어 SELECT를 수행할 때에는 특정 DOUBLE 값과 같은 값을 갖는 조건(즉, 등식 조건)이 아니라 범위를 갖는 조건을 주는 것이 좋다. 이 특징은 앞에서 설명한 FLOAT 타입도 마찬가지이다. 이것은 CUBRID만의 특징이 아니라, 근사치 수치형 데이터 타입을 다루는 모든 컴퓨터의 특징이다. | ||
DOUBLE의 유효 숫자는 15자리이다. | ||
2) 예제 | ||
|
||
7. MONETARY | ||
MONETARY 데이터 타입은 근사치 수치형 타입이다. 실제통화(currency) 종류는 시스템에 정의된 로케일에 의해 정해진다. 정밀도와 스케일은 시스템에 따라 다를 수 있는데, 보통 정밀도는 15, 스케일은 -308에서 +308까지 허용된다. 실제 허용되는 값은 범위는 DOUBLE과 같다. | ||
|
||
1) 참고 사항 | ||
달러 기호나 소수점을 사용할 수도 있으나, 쉼표(,)는 사용할 수 없다. | ||
2) 예제 | ||
|
||
- 강좌 URL : http://www.gurubee.net/lecture/2024
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.