데이터타입의 변환
데이터 타입의 변환은 숫자나 날짜 타입을 문자와 함께 결합하거나 보고서 양식에 맞추기 위해 주로 사용한다.
데이터 타입의 변환은 숫자나 날짜 타입을 문자로, 문자를 숫자로, 문자를 날짜로 변환하는 기능이다.
데이터 타입을 변환하는 방법은 다음과 같이 분류된다.• 묵시적(implicit)으로 변환하는 방법
• 명시적(explicit)으로 변환하는 방법
묵시적으로 변환하는 방법
• INSERT, UPDATE문을 수행하는 동안 컬럼에 따라 데이터타입이 바뀜.
• SELECT FROM 문에서 from되는 컬럼은 타킷 변수의 타입으로 바뀜
• numeric을 다룰때는 최대의 precision과 scale로 바뀌기 때문에 numeric 데이터타입이 변경됨
• character값과 numeric 값을 비교할 때는 character 데이터를 numeric 값으로 변환함
• 캐릭터값과 캐릭터값, NUMBER와 NUMBER, floating-point number 사이의 변환은 정확하지 않을 수 있다. 이유는 캐릭터 타입과 NUMBER는 decimal precision으로 값을 표시하고, floating-point number는 binary precision으로 표시되기 때문이다.
• CLOB값을 VARCHAR2을 사용하여 캐릭터값으로 변환하거나, BLOB을 RAW 데이터로 변환할 때, 변환된 값이 타킷 데이터타입보다 더 크면 에러를 발생한다.
• BINARY_FLOAT에서 BINARY_DOUBLE로 정확하게 변환된다.
• BINARY_DOUBLE을 BINARY_FLOAT로 변환할 때, BINARY_DOUBLE값이 BINARY_FLOAT보다 더 정밀한 값을 사용한다면 그 결과는 정확하지 않다.
• DATE값을 가진 캐릭터값을 비교하면 캐릭터 데이터를 DATE로 변환한다.
• 함수나 오퍼레이터에 쓰이기 위해 받아들인 아규먼트는 받아들인 데이터타입으로 아규먼트를 변경한다.
• 등호(=)와 같은 assignment에서는 오른쪽을 왼쪽의 데이터 타입으로 벼경된다.
• concatenation 동작에서는 noncharacter 데이터타입을 CHAR이나 NCHAR로 변경한다.
• character와 noncharacter 데이터타입에 대한 산술동작과 비교에서, 캐릭터 데이터타입은 numeric, date, rowid로 바뀐다. CHAR/VARCHAR2와 NCHAR/NVARCHAR2사이 산술동작은 NUMBER로 변경된다.
• CHAR과 VARCHAR2, NCHAR과 NVARCHAR2의 비교결과는 다른 문자셋이 될 수 있다. 그러므로 아래의 표를 참조하기 바란다.
• 대부분의 SQL character 함수는 매개변수로 CLOB를 받아들인다. 오라클에서는 CLOB와 캐릭터타입을 묵시적으로 변환한다. CLOB의 데이터가 4000바이트를 초과하면 처음 4000바이트까지만 CHAR로 변환한다.
명시적으로 변환하는 방법
날짜의 연산
데이터 타입의 변환은 숫자나 날짜 타입을 문자와 함께 결합하거나 보고서 양식에 맞추기 위해 주로 사용한다.
데이터 타입의 변환은 숫자나 날짜 타입을 문자로, 문자를 숫자로, 문자를 날짜로 변환하는 기능이다.
데이터 타입을 변환하는 방법은 다음과 같이 분류된다.
묵시적으로 변환하는 방법
묵시적 데이터 타입 변환은 정확한 연산을 위하여 오라클에서 데이터 타입을 내부적으로 변환하는 경우이다. 예를 들어, where a=b에서 비교되는 데이터 타입이 서로 다른 경우 a와 b를 동일한 데이터 타입으로 비교하기 위하여 a,b중 하나의 데이터 타입을 내부적으로 변환한다.
다음의 표는 a,b의 데이터 타입 종류에 따른 묵시적인 데이터 타입 변환 방법이다.
A의 데이터 타입 | B의 데이터 타입 | 변환 결과 |
---|---|---|
NUMBER | VARCHAR2 또는 CHAR | B가 NUMBER 타입으로 변환 |
VARCHAR2 또는 CHAR | NUMBER | A가 NUMBER 타입으로 변환 |
분류 | CHAR | VARCHAR2 | NCHAR | NVARCHAR2 | DATE | DATETIME/ INTERNAL | NUMBER | BINARY_ FLOAT | BINARY_ DOUBLE | LONG | RAW | ROWID | CLOB | BLOB | NCLOB |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CHAR | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | ||
VARCHAR2 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | ||
NCHAR | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | ||
NVARCHAR2 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | ||
DATE | √ | √ | √ | √ | |||||||||||
DATETIME/INTERVAL | √ | √ | √ | √ | √ | ||||||||||
NUMBER | √ | √ | √ | √ | √ | √ | |||||||||
BINARY_FLOAT | √ | √ | √ | √ | √ | √ | |||||||||
BINARY_DOUBLE | √ | √ | √ | √ | √ | √ | |||||||||
LONG | √ | √ | √ | √ | √(주1) | √ | √ | √ | |||||||
RAW | √ | √ | √ | √ | √ | √ | |||||||||
ROWID | √ | √ | √ | ||||||||||||
CLOB | √ | √ | √ | √ | √ | √ | |||||||||
BLOB | √ | ||||||||||||||
NCLOB | √ | √ | √ | √ | √ | √ | |||||||||
주1: LONG을 INTERVAL로 바로 변환할 수 없으며, LONG을 VARCHAR2로 변환하려면, TO_CHAR(interval)을 사용하여 변환하여 INTERVAL에 따른 VARCHAR2값으로 변환할 수 있다.
묵시적 데이터타입 변환에 다른 규칙
다른 문자 타입의 직접 변환
to CHAR | to VARCHAR2 | to NCHAR | to NVARCHAR2 | |
---|---|---|---|---|
from CHAR | VARCHAR2 | NCHAR | NVARCHAR2 | |
from VARCHAR2 | VARCHAR2 | NVARCHAR2 | NVARCHAR2 | |
from NCHAR | NCHAR | NCHAR | NVARCHAR2 | |
from NVARCHAR2 | NVARCHAR2 | NVARCHAR2 | NVARCHAR2 | |
【예제】 SQL> conn oe/oe Connected. SQL> select salary +'10' from employees; ☜ text literal예제 SALARY+'10' ----------- 24010 17010 17010 ...... SQL> select last_name from employees 2 where employee_id='200'; ☜ character와 number 예제 LAST_NAME -------------------------------------------------- Whalen SQL> select last_name from employees 2 where hire_date='03-MAR-97'; ☜ Date 예제 LAST_NAME -------------------------------------------------- Everett SQL>
명시적으로 변환하는 방법
사용자가 데이터 타입 변환 함수를 이용하여 명시적으로 데이터 타입을 변환할 수 있다. 데이터 타입 변환 함수는 숫자/날짜 타입을 문자 타입으로 변환하는 to_char함수, 문자열을 숫자 타입으로 변환하는 to_number 함수, 문자열을 날짜 타입으로 변환하는 to_date 함수가 있다.
사용자에 의해서 명시적으로 데이터 타입을 변환해주는 함수
함수 | 설명 |
---|---|
TO_NUMBER | char,varchar2와 같은 문자열 타입을 숫자 타입으로 변환 |
TO_CHAR(number) | number, date와 같은 숫자, 날짜 타입을 문자 타입으로 변환, TO_CHAR(character),TO_CHAR(datetime) |
TO_DATE | number, char, varchar2와 같은 숫자, 문자 타입을 날짜 타입으로 변환 |
CONVERT | 문자열을 한 국가의 언어 형식에서 다른 국가 언어 형식으로 변환하여 실행 |
HEXTORAW | 16진수 문자열을 2진수로 문자열을 변환 |
to | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
CHAR VARCHAR2 NCAHR NVARCHAR2 | NUMBER | Datetime/interval | RAW | ROWID | LONG, LONG RAW | CLOB NCLOB BLOB | BINARY_FLOAT | BINARY_DOUBLE | ||
from | CHAR VARCHAR2 NCHAR NVARCHAR2 | TO_CHAR(char.) TO_NCHAR(char.) | TO_NUMBER | TO_DATE TO_TIMESTAMP TO_TIMESTAMP_TZ TO_YMINTERVAL TO_DSINTERVAL | HEXTORAW | CHARTOROWID | TO_CLOB TO_NCLOB | TO_BINARY_FLOAT | TO_BINARY_DOUBLE | |
NUMBER | TO_CHAR(number) TO_NCHAR(number) | TO_DATE NUMTOYMINTERVAL NUMTODSINTERVAL | TO_BINARY_FLOAT | TO_BINARY_DOUBLE | ||||||
Datetime/Interval | TO_CHAR(date) TO_NCHAR(datetime) | |||||||||
RAW | RAWTOHEX RAWTONHEX | TO_BLOB | ||||||||
ROWID | ROWIDTOCHAR | |||||||||
LONG, LONG RAW | TO_LOB | |||||||||
CLOB NCLOB BLOB | TO_CHAR TO_NCHAR | TO_CLOB TO_NCLOB | ||||||||
BINARY_FLOAT | TO_CHAR(char.) TO_NCHAR(char.) | TO_NUMBER | TO_BIBARY_FLOAT | TO_BINARY_DOUBLE | ||||||
BINARY_DOUBLE | TO_CHAR(char.) TO_NCHAR(char.) | TO_NUMBER | TO_BIBARY_FLOAT | TO_BINARY_DOUBLE | ||||||
날짜의 연산
날짜 데이터는 날짜나 숫자를 더하거나 빼는 등의 산술 연산이 가능하며, 가능한 날짜의 연산은 다음과 같다.
연산 | 결과 | 비고 |
---|---|---|
날짜 + 숫자 | 날짜 | 주어진 숫자(일 수)를 날짜에 더한다. |
날짜 - 숫자 | 날짜 | 날짜에서 주어진 숫자(일 수)를 뺀다. |
날짜 - 날짜 | 숫 자(일 수) | 하나의 날짜에서 다른 하나의 날짜를 뺀다. |
날짜 + 숫자/24 | 날짜 | 날짜에 시간을 더한다. |
출처 http://radiocom.kunsan.ac.kr/lecture/oracle/datatype/datatype_conversion.html
'oracle' 카테고리의 다른 글
[펌] 오라클 SQL to_char 날짜 관련 정리 (0) | 2009.10.08 |
---|---|
[펌] 오라클 timestamp (0) | 2009.10.08 |
오라클 날짜 포맷팅 (0) | 2009.08.25 |
오라클에서 dmp 파일로 export 또는 import 하기 (0) | 2009.07.31 |
dmp파일로부터 백업데이터 복원 (0) | 2009.07.31 |