본문 바로가기

SQL/Oracle

NVL vs NVL2 vs COALESCE vs NULLIF 구문차이정리

728x90
반응형

1. NVL

NVL (exp1, exp2): exp1이 null이면 exp2로 바꾼다.

 

2. NVL2

NVL2(exp1,exp2,exp3) : exp1이  null이이 아니면 exp2로 바꾸고, exp1이 null이면 exp3로 바꾼다. exp1은 어떤타입의 데이터로 가질 수 있다.

 

3.COALESCE

COALESCE (expr1, expr2, ..., exprn), for n>=3

[Oracle Documents]

SELECT product_id, list_price, min_price,
   COALESCE(0.9*list_price, min_price, 5) "Sale"
   FROM product_information
   WHERE supplier_id = 102050
   ORDER BY product_id, list_price, min_price, "Sale";

결과값 (list_price*0.9한값을 sales에 넣는데, list_price값이 null이면 3번째 컬럼(min_price)의 값을, list_price is null, 3번째컬럼(min_price)도 null이면 default값은 '5'(=exp3) 를 넣어라.

PRODUCT_ID LIST_PRICE  MIN_PRICE       Sale
---------- ---------- ---------- ----------
      1769         48                  43.2
      1770                    73         73
      2378        305        247      274.5
      2382        850        731        765
      3355                                5

 

4. NULLIF

NULLIF(exp1,exp2): exp1 = exp2 이면 null값 return exp1 <> exp2이면 exp1(첫번째 expression)을 return한다.

 

결론.

function(exp1,exp2,exp3....)에서 exp의 관계 (같거나, 다르다)나 null 여부(is null or not null) 에 따라 각기 용법에 맞는 expression을 사용하면 된다. 

728x90