게시일: Oct 22, 2011 2:21:0 AM
① CASE는 DECODE 함수를 사용하는 것보다 좋은 성능을 발휘한다.
② DECODE는 오라클에서만 사용이 가능한 함수인 반명, CASE는 표준 SQL에 속한다.
③ CASE 표현식 내부에서 또 다른 CASE를 사용할 수 있다.
④ CASE를 구성하는 파라미터는 최대 255개까지 사용할 수 있다. WHEN ... THEN 쌍은 2개의 파라미터로 취급된다.
[기본형]
CASE 대상값 WHEN 비교값1 THEN 처리1
WHEN 비교값2 THEN 처리2
...
ELSE 디폴트 처리
END
[검색형]
CASE WHEN 비교조건1 THEN 처리1
WHEN 비교조건2 THEN 처리2
...
ELSE 디폴트 처리
END
select pid
-- decode
, decode(substr(to_char(age),1,1), '1', '십대'
, '2', '이십대'
, '3', '삼십대'
, '4', '사십대'
, '5', '오십대'
, '육십대 이상') example_decode
-- case 기본형
, case substr(to_char(age),1,1) when '1' then '십대'
when '2' then '이십대'
when '3' then '삼십대'
when '4' then '사십대'
when '5' then '오십대'
else '육십대 이상'
end example_case1
-- case 검색형
, case when age between 10 and 19 then '십대'
when age between 20 and 29 then '이십대'
when age between 30 and 39 then '삼십대'
when age between 40 and 49 then '사십대'
when age between 50 and 59 then '오십대'
else '육십대 이상'
end example_case2
from (
select '1' pid, '홍길동' pname, 33 age from dual
union all
select '2' pid, '장길산' pname, 25 age from dual
union all
select '3' pid, '임꺽정' pname, 55 age from dual
)
;
-------------------------------------------------
PID EXAMPLE_DECODE EXAMPLE_CASE1 EXAMPLE_CASE2
-------------------------------------------------
1 삼십대 삼십대 삼십대
2 이십대 이십대 이십대
3 오십대 오십대 오십대
-------------------------------------------------
-- where 조건에 사용
select *
from (
select '1' pid, '홍길동' pname, 33 age from dual
union all
select '2' pid, '장길산' pname, 25 age from dual
union all
select '3' pid, '임꺽정' pname, 55 age from dual
)
where ( case when age between 10 and 19 then '십대'
when age between 20 and 29 then '이십대'
when age between 30 and 39 then '삼십대'
when age between 40 and 49 then '사십대'
when age between 50 and 59 then '오십대'
else '육십대 이상'
end
) in ('이십대', '오십대')
;
---------------
PID PNAME AGE
---------------
2 장길산 25
3 임꺽정 55
---------------