Data Base

Oracle) DECODE 함수 , TO_CHAR 함수 , CASE문

5_jinseok12 2018. 4. 9. 17:03
728x90

 

SYSDATE는 현재 날짜를 나타낸다.

 

다음날 설정하기.

 

 

그럼 이제 간단한 응용을 해보자

SYSDATE에서 +100일을 한 후 요일을 나타내자.

TO_CHAR 함수를 사용하면 된다.

 

TO_CHAR(숫자 -> 문자로 변환할 때)

TO_CHAR안에 정보를 입력한 후 'day' 로 인해 숫자에서 화요일로 바뀌어 출력된다

 

다음날 출력하기. TO_CHAR을 사용하지 않으면 위에 사진처럼 숫자로만 나오게 된다.

 

 

 

DECODE() 함수

 

DECODE 함수는 오라클에서만 사용되는 함수로 IF문을 사용해야 하는 조건문을 처리할 수 있다

로아클에서만 사용되는 함수라서 중요하지 않은건 아니다.

오라클내에서 자주 사용하기 때문에 제대로 익혀서 유용하게 사용하면 된다.

 

예를 들어보면,

DECODE(A,B,'0','1') :

A와 B가 같다면 '0' 다르다면 '1' 을 출력한다.

 

DECODE(A,B,'0',C,'1','2')

A와 B가 같다면 0, A와 C가 같다면 1 다르다면 2를 출력한다

 

DECODE(A,B,'1',NULL)

-> A랑 B랑 같으면 1로 처리하고
-> A랑 B랑 다르면 NULL로 처리한다

 

DECODE(A,B,1,C,2,D,3,E,4)

- A하고 B와 같으면 1
- A하고 C와 같으면 2
- A하고 D와 같으면 3
- A하고 E와 같으면 4

if~ elseif 문이라고 생각하면 된다

 

 

 

문제) EMP 테이블에서 EMPNO, ENAME을 출력하라

단 HIREDATE 를 1~3월 까지로 설정.

 

 

문제) Student 테이블에서 1월에 생일인 사람들을 출력하라.

 

문제) Professor 테이블에서  부서번호 201번 사람들의 이름과 월급,보너스를 출력하고 연봉을 계산하라

 TO_CHAR((pay*12)+bonus,'999,999')  즉 TOTAL을 1000단위로 끊어서 나타내준다.

연봉이나 돈을 나타낼때, 인구수를 나타낼때 주로 사용한다

6970 -> 6,970

 

문제) 100일 후의 날짜와 시간을 출력하라

YYYY 를 입력하면 2018 을 나타내고 YY만 입력하면 18을 나타낸다.

 

 

 

DECODE 함수에 SUBSTR, INSTR 응용하기

 

문제)

Student 테이블에서 1 전공이 101번인 학생의 이름과 연락처와 지역을 출력하라

지역번호가 02일때 SEOUL , 051일때 BUSAN을 , 055일때 GYEONGGI를 LOC 컬럼에 출력하라.

deptno1 = 101이다 .

위에 문제를 해석해보면 DECODE 안에 SUBSTR 안에 INSTR이 있다.

Student의 테이블 안에 NAME,TEL컬럼과

DECODE를 사용하여 해당조건을 출력하도록 만드는 LOC 컬럼을 만든다.

SUBSTR함수로 인해 TEL컬럼의 첫번째 부터 INSTR함수 까지,

INSTR 함수로 인해 TEL 컬럼의 ')' 기호에서 -1 한 값까지,

그 숫자(지역번호)가 02 라면 "SEOUL"을 출력, 055라면 "GYEONGGI"를, 051 이라면 "BUSAN"을 출력하고

그 컬럼이름을 "LOC"로 지정.

WHERE 절로 인해 조건을 DEPTNO1 = 101로 지정하여 출력한다.

 

 

DECODE 문 안에 DECODE문을 사용하기

DECODE( A, B, DECODE( C, D, 1,NULL))이라고 할 때

A가 B일 경우 중에 C가 D를 만족하면 1을 출력하고 C가 D가 아닐 경우

NYLL을 출력한다.

 

문제)

Professor 의 테이블에서 부서번호,이름을 출력하고 부서번호가 101번 안에서

이름이 'Audie Murphy' 인 사람일 경우 'BEST'를 출력하고 아닐 경우 'GOOD'을 출력한다.

그 출력하는 컬럼의 이름을 'ETC'로 지정하라

DECODE문 안에 DECODE문을 사용하여 조건을 하나 더 걸었다.

 

 

 

문제)

Professor 테이블에서 부서번호, 이름을 출력하고 부서번호가 101번중에서

이름이 "Audie Murphy" 인 사람은 "GENTLMAN"을  아닌사람은"respect" 를 출력하라

부서번호가 101번이 아닌 사람은 공백을 출력하라

 

 

문제) Student 테이블에서 이름,주민번호를 출력하되 부서번호는 101번이다

주민번호의 7번째 자리 숫자가 1일 경우 'MAN'을 2 일 경우 'WOMAN' 을 출력하고 컬럼이름을 'GENDER'로 지정한다

 

 

 

 

문제)

Student 테이블에서 deptno1 이 201번인 학생의 이름과 전화번호,지역명을 출력하세요

단 지역번호가 02이면 "SEOUL", 031이면 "GYEONGGI" , 051이면 "BUSAN"이며 나머지는 ETC로 지정.

컬럼명은 "LOC" 로 지정하라.

 

 

CASE문

 

DECODE 함수는 주로 = 인 값을 처리하는데 사용한다

크거나 작은 조건을 처리할 경우 DECODE함수는 불편하지만 CASE는 그런 부분을 쉽게 처리할 수 있다.

CASE 표현식 내부에서는 콜마를 사용하지 않는다

 

CASE 조건 WHEN 결과1 THEN 출력1[WHEN 결과2 THEN출력2] ELSE 출력3 END "컬럼명"


case 컬럼 when 값 then 결과 //when 앞에 컬럼을 쓴 경우 값과 = 비교하는것
                                       //값이 큰지 안큰지 비교할땐 when 뒤에 사용
    

 

 

NVL함수

NULL 값을 만나면 다른 값으로 치환해서 출력하는 함수

 

NULL(sal , 0) -> sal 컬럼 값이 null일 경우 null 대신 0으로 치환.

NULL(sal,100) -> sal 컬럼값이 null일 경우 null 대신 100으로 치환

 

 

NVL2()함수

NVL 함수의 확장으로 NULL값이 아닐 경우 출력할 값을 지정할 수 있다.

 

 

 

반응형

'Data Base' 카테고리의 다른 글

Oracle) 단일행 Sub Query  (0) 2018.05.04
Oracle) MAX/MIN 함수, RANK 함수  (0) 2018.05.04
Oracle) INSTR,SUBSTR,REPLACE 함수  (0) 2018.04.08
Oracle) 다양한 연산자 활용  (0) 2018.04.05
Oracle) 기본 명령어  (0) 2018.04.05