게시일: Oct 21, 2011 4:3:8 AM
- DECODE(expr, search1, result1, search2, result2, ..., default_result)
: if expr = search1 then
result1
else if expr = serach2 then
result2
else if .........
....
else
default_result
: 비교대상이 되는 expr과 search 표현식은 데이터 타입이 같아야 한다.
* 자동 형변환이 가능한 경우에는 오라클에서 자동으로 형변환 함. 자동 형변환이 불가능할 경우는 오류 발생
: exprt과 search, result의 세트는 최대 255개까지 올 수 있다.
: default_result는 생략 가능한데, default_result가 null이라면 써주지 않는게 더 효율적이지 않을까... - 김명종
select a.pid
, b.pname
, b.birthday d_birthday
, to_char(b.birthday, 'yyyy-mm-dd') s_birthday
-----------------------------------------------
, decode(b.pname, '홍길동', '등록'
, '장길산', '등록'
, '임꺽정', '등록'
, '미등록') name_1
, decode(b.pname, '홍길동', '등록'
, '장길산', '등록'
, '임꺽정', '등록'
, null) name_2 -- 불필요하게 null을 사용할 필요 없음. 어차피 조건 안맞으면 null 반환
, decode(b.pname, '홍길동', '등록'
, '장길산', '등록'
, '임꺽정', '등록') name_3 -- 불필요하게 null을 사용할 필요 없음
, decode(b.birthday, '1980-10-01', 'same', 'different') diff_1 -- 자동 형변환 (different)
, decode(to_char(b.birthday, 'yyyy-mm-dd'), to_date('1980-10-01','yyyy-mm-dd'), 'same', 'different') diff_2 -- 자동 형변환 (same)
from (
select '1' pid, '홍길동' pname, to_date('1980-10-01', 'yyyy-mm-dd') birthday from dual
union all
select '2' pid, '장길산' pname, to_date('1982-03-21', 'yyyy-mm-dd') birthday from dual
union all
select '3' pid, '임꺽정' pname, to_date('1999-05-01', 'yyyy-mm-dd') birthday from dual
) b
, (
select '1' pid, '아이폰' phone from dual
union all
select '2' pid, 'HTC Desire' phone from dual
union all
select '3' pid, '갤럭시S' phone from dual
union all
select '4' pid, 'AnyCall' phone from dual
union all
select '5' pid, '휴대전화 없음' phone from dual
) a
where b.pid(+) = a.pid ;
---------------------------------------------------------------------------------------------
PID PNAME D_BIRTHDAY S_BIRTHDAY NAME_1 NAME_2 NAME_3 DIFF_1 DIFF_2
---------------------------------------------------------------------------------------------
1 홍길동 1980-10-01 00:00:00 1980-10-01 등록 등록 등록 different same
2 장길산 1982-03-21 00:00:00 1982-03-21 등록 등록 등록 different different
3 임꺽정 1999-05-01 00:00:00 1999-05-01 등록 등록 등록 different different
4 미등록 different different
5 미등록 different different
---------------------------------------------------------------------------------------------