본문 바로가기
데이터베이스

5. 일반함수

by 김마리님 2020. 3. 25.

숫자나 문자, 날짜에 관계 없이 모두 사용가능한 함수이다.

 

1. NVL

NVL(컬럼,치환할 값) : 컬럼 내에서 null을 만났을 때, null을 지정값으로 치환해주는 함수.

예시를 보자.

select NVL(null,0), NVL(100,0)
from DUAL;

다음과 같이 null은 0으로 치환되었는데에 반해, 100은 그대로 100으로 출력되는 것을 볼 수 있다.

이를 이용한 예시는 다음과 같다.

 

select ENAME, SAL, NVL(COMM,0)
from EMP
where NVL(COMM, 0) <500;

다음과 같이 null을 모두 0으로 만듬으로써 기존에 비교연산자를 사용할 수 없는 null값을, 비교연산자를 사용할 수 있도록 조치할 수 있다.

 

 

2. decode

decode = if문과 같은, 즉, 조건문의 역할을 하는 오라클 내의 함수이다. 오라클만 가지고 있으며, 기타 데이터베이스는 들고있지 않다.

기본 문법은 다음과 같다

DECODE(A,B,문장1,문장2)

A가 B라면 문장1을, 아니라면 문장2를 출력하는 함수이다. 이 때, 문장 2는 생략해도 되고, 대신 NULL값이 출력된다.

select deptno,name,decode(deptno,101,'computer enginerring')
from professor;

문장 2자리에 아무것도 없으니, (null)이라는 값이 출력되었다. 문장 2자리에 값을 넣어보자.

select deptno,name,decode(deptno,101,'computer enginerring','etc')
from professor;

문장 2자리에 etc를 넣으니, 자리에 (null)대신 etc가 들어가있는 모습이 보인다.

 

DECODE도 다중 if else 구문처럼 조건을 여러개 걸 수 있다.

DECODE(A, B, 문장1, C, 문장2, 문장3)

다음과 같이 조건이 B와 C, 두 개 이상으로 확장가능하며, 모든 조건이 일치하지 않는 경우 문장 3을 출력한다.

select deptno,name,decode(deptno,
    101,'Computer Engineering',
    102,'Multimidia Engineering',
    103,'Software Engineering',
    'Etc'
) As dname
from professor;

다음과 같이, 조건에 맞는 실행문이 들어가고, 모든 조건에 맞지 않는 201번은 마지막 문장인 etc가 들어간 모습이 보인다. 마찬가지로, 다중문도 문장을 생략하면 null 값을 출력한다.

 

물론 이중 if문처럼 DECODE도 이중으로 만들 수 있다.

select deptno,name,decode(deptno,
    101,decode(name,
        '조인형','Best!',
        'Good!'
        )
    )
from professor;

다음 DECODE문은 바깥의 DOCODE로 101호를 걸러내고, 101호중에서도 추가로 '조인형'이라는 선생님을 걸러낸다.

if문과 굉장히 유사하지 않은가?

 

 

3. CASE문

DECODE함수의 경우, 조건에 수식을 사용할 수 없다는 점과, 기타 다른 데이터베이스 프로그램에서는 쓰지 않는다는 점이다. 다른 데이터베이스 함수의 경우 CASE함수를 사용하는데, 오라클 역시 조건에 수식이 들어가야 하는 경우 CASE문을 이용한다.

예시를 보자.

select name, substr(jumin,3,2) "MONTH",
    CASE WHEN substr(jumin,3,2) BETWEEN '01' and '03' then '1/4'
         WHEN substr(jumin,3,2) BETWEEN '04' and '06' then '2/4'
         WHEN substr(jumin,3,2) BETWEEN '07' and '09' then '3/4'
         WHEN substr(jumin,3,2) BETWEEN '10' and '12' then '4/4'
    end "Quarter"
from student;    

다음과 같이 case 내부에 여러 조건이 들어가있는데, 내부에 연산자(between)이 들어가있는 것을 볼 수 있다.

다음과 같이 case문은 연산자를 포함할 수 있는 장점이 있다.

반응형

'데이터베이스' 카테고리의 다른 글

7. 그룹함수  (0) 2020.03.26
6. 정규식을 이용한 함수  (0) 2020.03.26
4. 숫자 함수, 날짜 함수  (0) 2020.03.25
3. 다양한 연산자  (0) 2020.03.25
오라클 날짜 데이터 포맷 변경하기  (0) 2020.03.25