게시일: Oct 20, 2011 12:11:11 AM
- NVL(expr1, expr2) : if expr1 = null then expr2 else expr1
select null * 30, null + 30, nvl(null, 0) * 30, nvl(null, 1) * 30 from dual;
----------------------------------------------------------------------------
null null 0 30
- NVL2(expr1, expr2, expr3) : if expr1 = null then expr3 else expr2
select a.pname
, nvl(a.pname, '이름 미등록') classification_1
, nvl2(a.pname, '등록', '미등록') classification_2
from (
select '1' pid, '홍길동' pname from dual
union all
select '2' pid, '장길산' pname from dual
union all
select '3' pid, '임꺽정' pname from dual
union all
select '4' pid, '' pname from dual
) a ;
--------------------------------------------
PNAME CLASSIFICATION_1 CLASSIFICATION_2
--------------------------------------------
홍길동 홍길동 등록
장길산 장길산 등록
임꺽정 임꺽정 등록
이름 미등록 미등록
--------------------------------------------
- NULLIF(expr1, expr2) : if expr1 == expr2 then null else expr1
select a.pname
, a.pname2
, nullif(a.pname, a.pname2) classification_1
, nvl(nullif(a.pname, a.pname2), '이름 중복') classification_2
from (
select '1' pid, '홍길동' pname, '홍길동' pname2 from dual
union all
select '2' pid, '장길산' pname, '홍길동' pname2 from dual
) a ;
----------------------------------------------------
PNAME PNAME2 CLASSIFICATION_1 CLASSIFICATION_2
----------------------------------------------------
홍길동 홍길동 이름 중복
장길산 홍길동 장길산 장길산
----------------------------------------------------
- COALESCE(expr1, expr2, ...) : expr1, expr2.... 의 모든 파라미터 리스트에서 첫 번째로 null이 아닌 파라미터를 반환
모든 파라미터가 nul일 경우는 null을 반환
select coalesce(col_1, col_2, col_3, col_4, col_5, col_6) --> 홍길동
from (select null col_1, null col_2, null col_3, null col_4, '홍길동' col_5, '장길산' col_6 from dual);
select coalesce(col_1, col_2, col_3, col_4, col_5, col_6) -->
from (select null col_1, null col_2, null col_3, null col_4, ' ' col_5, '장길산' col_6 from dual);
- LNNVL(condition) : condition(조건)을 체크하여 조건결과 값이 FALSE나 UNKNOWN일 경우 TRUE를, 결과가 TRUR이면 FALSE를 반환 -> 반대 개념 주의
SELECT 리스트에서는 사용할 수 없고 오직 WHERE 절에서만 사용 가능
select pname
, salary
, bonus
, salary + nvl(bonus, 0) totamt
from (
select '홍길동' pname, 2000 salary, 1000 bonus from dual
union all
select '장길산' pname, 3000 salary, null bonus from dual
union all
select '임꺽정' pname, 4000 salary, 2000 bonus from dual
)
--where salary + nvl(bonus, 0) > 2000;
where lnnvl(salary + bonus <= 2000); -- 구하고자 하는 조건의 반대의 경우를 파라미터 인자로 넣어야 함. 헷갈려~~~~~~~
------------------------------
PNAME SALARY BONUS TOTAMT
------------------------------
홍길동 2000 1000 3000
장길산 3000 3000
임꺽정 4000 2000 6000
------------------------------