본문 바로가기

SQL/ORACLE

데이터 타입 변환

1. 묵시적 데이터 타입 변환

 

묵시적 데이터 타입 변환은 WHERE 절에서 서로 타입이 맞지 않은 컬럼과 상수를 비교하려 하였을 경우, 

오라클 내부에서 정확한 연산을 처리하기 위하여 묵시적으로 데이터 타입을 숫자 타입으로 변경하는 것을 말한다.

 

'WHERE 컬럼 = 상수'

A의 데이터 타입 B의 데이터 타입 변환 결과
NUMBER VARCHAR2 또는 CHAR B 가 NUMBER 타입으로 변환
VARCHAR2 또는 CHAR NUMBER A 가 NUMBER 타입으로 변환

즉 컬럼, 상수 어느 쪽이 문자 타입이어도 둘의 타입이 일치하지 않을 때에 숫자가 아닌 쪽을 숫자로 묵시적 타입 변환을 하는 것이다.

학생 테이블의 GRADE 컬럼은 CHAR 로 데이터 타입이 지정되어 있기 때문에

숫자 상수와의 비교 연산을 진행하게 되면 묵시적으로 TO_NUMBER 를 호출하여 동작하게 된다.

 

 

 

2. 명시적 데이터 타입 변환

 

데이터 타입 변환 함수를 사용하여 명시적으로 데이터 타입을 변환하는 형태이다.

 

1️⃣ TO_CHAR 함수

날짜나 숫자를 문자 타입으로 변환하기 위하여 사용되는 함수이다.

형식을 추가하게 되면 날짜 출력의 형식을 변경하여 적용할 수도 있다.

TO_CHAR(NUMBER | DATE, 'FORMAT')
자주 쓰이는 날짜 출력 형식의 종류

🔷 년도 형식
👉 YYYY : (DATE , 'YYYY') : 2022
👉 YY : (DATE, 'YY') : 22

🔷 월 형식
👉 MM : (DATE, 'MM') : 10
👉 Q : (DATE, 'Q') : 4 (분기를 표시)

🔷 주 형식
👉 WW : (DATE, 'WW') : 41 (일 년 중 몇 주차인지 표시)
👉 W : (DATE, 'W') : 4 (월 중 몇 주차인지 표시)

🔷 일 형식
👉 DDD : (DATE, 'DDD') : 230 (일 년 중 며칠째인지 표시)
👉 DD : (DATE, 'DD') : 22 (월 중 며칠인지 표시)
👉 D : (DATE, 'D') : 3 (주 중 며칠인지 표시 = 요일)

🔷 시각 형식
👉 HH : (DATE, 'HH') : 2 (12 시간대로 하루를 표현)
👉 HH24 : (DATE, 'HH24') : 14 (24 시간대로 하루를 표현)

🔷 분 형식
👉 MI : (DATE, 'MI') : 34

🔷 초 형식
👉 SS :(DATE, 'SS') : 45

숫자 출력 형식 변환
👉 9 : (1234, '99999') : 1234 (한 자리의 숫자 표시)
👉 .  : (1234.56, '9999.99') : 1234.56 (소수점 자리수를 표시)
👉 , : (1234, '9,999') : 1,234 (특정 위치에 쉼표 표시)
👉 0 : (1234, '099999') : 001234 (나머지 자리 0으로 채우기)

 

 

2️⃣ T0_NUMBER 함수

숫자로 구성된 문자열을 숫자 데이터로 변환하기 위한 함수이다.

반드시 문자열은 숫자로만 이뤄져 있어야 한다.

TO_NUMBER(CHAR)

 

 

3️⃣ TO_DATE 함수

숫자와 문자로 구성된 문자열을 날짜 데이터로 변환하기 위한 함수

TO_DATE(CHAR)

 

 

3. 일반 함수 : NULLIF 함수

NULLIF(EXPRESSION1, EXPRESSION2)

NULLIF 함수는 두 개의 표현식을 비교하여 두 값이 동일하면 NULL 을 반환하고, 동일하지 않으면 첫 번째 표현식의 값을 반환하는 함수이다.

 

 

4. 일반 함수 : COALESCE 함수

COALESCE(EXPRESSION1, EXPRESSION2, EXPRESSION3,...EXPRESSIONn)

표현식 1번부터 NULL 이 아니게 될 때를 확인하는데, NULL 이 아니게 될 때의 표현식을 반환한다.

즉, 표현식 1번이 NULL 이면 다음으로 넘어가 표현식 2번을 확인하고 2번이 NULL 이 아니면 2번의 표현식을 반환한다.

만약 2번도 NULL 이라면 표현식 3번으로 넘어가서 NULL 값인지를 또다시 확인하는 작업을 거친다.

COMM 컬럼이 NULL 이면 SAL 컬럼의 값이 출력되는 것이고,

SAL 컬럼의 값 또한 NULL 이면 0 이 출력되는 식이다.

 

 

 

5. 일반 함수 : CASE 함수

1️⃣ EXPRESSION = COMPARISON EXP 연산인 경우

CASE EXPRESSION
           WHEN COMPARISON EXP1 THEN RETURN EXP1
           [WHEN COMPARISON EXP2 THEN RETURN EXP2
           WHEN COMPARISON EXP3 THEN RETURN EXP3...
           ELSE EXPRESSION]
END
2️⃣ EXPRESSION = COMPARISON EXP 연산이 아닌 경우

CASE 
           WHEN EXPRESSION BETWEEN COMPARISON EXP1-1 AND  COMPARISON EXP1-2 THEN RETURN EXP1
           [WHEN EXPRESSION BETWEEN COMPARISON EXP2-1 AND  
COMPARISON EXP2-2 THEN RETURN EXP2...
           ELSE EXPRESSION]
END

CASE 함수는 DECODE 함수의 기능을 확장한 함수이다.

DECODE 함수는 = 비교 연산에 관련한 조건만을 작성할 수 있었지만,

CASE 함수에서는 산술, 관계, 논리 연산 등도 가능해졌다.

 

비교 연산을 사용할 때에는 다음과 같이 작성할 수 있다.

이 때 WHEN 절에는 비교 대상과의 타입을 맞춰줘야 한다.

 

'SQL > ORACLE' 카테고리의 다른 글

ORACLE SQL DEVELOPER 사이드바(접속) 보이게 하기  (0) 2022.11.04
GROUP BY : 그룹 함수  (0) 2022.11.02
SQL 단일 행 함수  (0) 2022.10.26
정렬 SORTING  (0) 2022.10.24
집합 연산자 : UNION  (0) 2022.10.24