CASE 사용법 참조 : http://miae1216.blog.me/20133583579
일반함수
NVL(exp1, exp2)
; exp1이 NULL이면 exp2로 변경, (exp1, exp2는 반드시 같은 데이터타입)
NVL2(exp1, exp2, exp3)
; exp1이 NULL이 아니면 exp2,
NULL 이면 exp3
DECODE(exp, 조건1, 결과값1,
조건2, 결과값2,
, 결과값3)
; 오라클에서만 제공
exp가 조건1이면 결과값1 출력,
조건2면 결과값2 출력
조건에 맞지 않는 값이면 결과값3 출력(이 값이 없으면 조건에 맞지 않는 값은 NULL로 처리)
(, 의 사용에 주의하세요~)
CASE exp WHEN 조건식1 THEN result1
WHEN 조건식2 THEN result2
ELSE result3
END
; exp가 조건식1에 만족하면 result1,
조건식2에 만족하면 result2,
위 조건식에 만족하지 않는 값이면 result3
* DECODE는 조건과 일치하는('=') 것밖에 비교할 수 없지만 CASE는 조건식('>=', between 등등) 을 사용할 수 있습니다.
* CASE는 반드시 END를 써야 끝이 납니다. 반드시 END를 써주세요.
* CASE문중 일치하는 조건을 쓰는 CASE는 DECODE로 바꿔주세요.(DECODE가 속도가 빠릅니다.)
NVL2 예제 학생의 이름, 지도교수 번호를 출력하여라. 단, 지도교수가 배정되지 않은 학생은 지도 교수 번호를 0000 으로 출력하여라.
SQL> select name, 2 nvl2( to_char(profno), to_char(profno), '0000' ) "지도교수" 3 from student;
NAME 지도교수번호 ---------- ---------------------------------------- 전인하 9903 이동훈 0000 박미경 0000 .... 류민정 9907
16 rows selected. (nvl2안에 to_char를 써준이유는 숫자타입에서는 '0000'을 출력하면 '0'만 출력되기때문에 문자타입으로 변경해서 '0000'을 출력한 것입니다.) |
NVL 예제 1 select name, sal, 2 nvl(comm,10), comm 3* from professor SQL> /
NAME SAL NVL(COMM,10) COMM ---------- ---------- ------------ ---------- 김도훈 500 20 20 이재우 320 10 성연희 360 15 15 염일웅 240 10 권혁일 450 25 25 이만식 420 10 전은지 210 10 남은혁 400 17 17
8 rows selected. |
||||||
DECODE 예제 학생 전화번호의 지역번호가 ’02’이면 ‘서울’, ‘051’이면 ‘부산’,’052’이면 ‘울산’,' 053’이면 ‘대구’, 나머지는 ‘Etc’ 로 하여 학생이름,전화번호,지역명(Loc)을 출력하여라.
SQL> select name, tel, 2 decode( substr(tel,1, instr(tel,')',1,1)-1), 3 '02', '서울', 4 '051', '부산', 5 '052', '울산', 6 '053', '대구', 7 '기타') 지역명 8 from student;
NAME TEL 지역 ---------- ------------- ---- 전인하 051)781-2158 부산 이동훈 055)426-1752 기타 박미경 055)261-8947 기타 .... 윤진욱 053)487-2698 대구 이광훈 055)736-4981 기타 김진경 052)175-3941 울산 조명훈 02)785-6984 서울 류민정 055)248-3679 기타
16 rows selected. |
|||||||
CASE 예제 교수 테이블에서 입사일이 1~4월인 모든 교수의 급여를 15% 인상하여 정수로 출력하되 절삭된 값을 출력하여라.
1 select name, hiredate, sal, 2 CASE WHEN to_char(hiredate,'mm') BETWEEN 1 and 4 3 THEN to_char( trunc(sal*1.15) ) 4 ELSE '-' 5 END "인상 후" 6* from professor SQL> /
NAME HIREDATE SAL 인상 후 ---------- ------------ ---------- ---------------------------------------- 김도훈 24-JUN-82 500 - 이재우 12-APR-95 320 368 성연희 17-MAY-93 360 - 염일웅 02-DEC-98 240 - 권혁일 08-JAN-86 450 517 이만식 13-SEP-88 420 - 전은지 01-JUN-01 210 - 남은혁 18-NOV-90 400 -
8 rows selected. |
'Oracle > SQL' 카테고리의 다른 글
2012.01.05 SQL 3일차(연습노트) ; 그룹함수테크닉,rollup이용,cube이용, having이용예 등등 (0) | 2012.01.09 |
---|---|
2012.01.05 SQL 3일차(그룹함수, rollup, cube) (0) | 2012.01.09 |
2012.01.03 SQL 2일차(1) 문자함수(LPAD,RPAD,REPLACE), 숫자함수, 날짜함수, 변환함수 (0) | 2012.01.09 |
2012.01.02 SQL 1일차(3) 연습노트( RTRIM의 미묘한 삭제, SUBSTR연습 ) (0) | 2012.01.09 |
SQL Plus 명령어 (0) | 2012.01.09 |