hyeonga_code
Database_21_일반 함수_NVL, NVL2, COALESCE 본문
-- SQL 함수
-- 일반 함수
-- 모든 데이터 유형을 사용할 수 있습니다.
-- 널 값을 사용할 수 있습니다.
-- NVL( expr 1, expr 2 )
-- 널 값을 실제 값으로 변환합니다.
-- 사용되는 데이터 유형 : 날짜, 문자, 숫자
-- 데이터 유형은 서로 일치해야 합니다.
-- NVL2( expr 1, expr 2, expr 3 )
-- expr 1이 null이 아닌 경우 expr 2를 반환하고 expr 1이 null인 경우 expr 3을 반환합니다.
-- COALESCE( expr 1, expr 2, .... expr n )
--표현식 리스트에서 처음으로 null이 아닌 표현식을 반환합니다.
-- NVL
SELECT last_name, commission_pct, NVL(commission_pct, 0)
FROM employees;
/*
LAST_NAME COMMISSION_PCT NVL(commission_pct, 0)
-------------------------------------------------------------------------------------
Matos ( null ) 0
Vargas ( null ) 0
Zlotkey 0.2 0.2
Abel 0.3 0.3
...
*/
SELECT last_name, salary+salary*commission_pct, salary+salary*NVL(commission_pct, 0)
FROM employees;
/*
LASE_NAME SALARY*COMMISSION_PCT SALARY*NVL(COMMISSION_PCT, 0)
------------------------------------------------------------------------------------------------------------
Matos ( null ) 2600
Vargas ( null ) 2500
Zlotkey 12600 12600
Abel 14300 14300
...
-- commission_pct가 0인 경우 모두 null 값이 반환됩니다.
-- commission_pct가 0인 경우 salary 값만 출력하기 위해서는 commision_pct가 0이 되어야 합니다.
*/
-- NVL2
SELECT last_name, salary+salary*NVL(commission_pct, 0), NVL2(commission_pct, '영업사원', '일반사원')
FROM employees;
/*
LAST_NAME SALARY*NVL(...,0) NVL2(..., '영업사원', '일반사원')
-----------------------------------------------------------------------------------------------------------
Matos 2600 일반사원
Vargas 2500 일반사원
Zlotkey 12600 영업사원
Abel 14300 영업사원
...
-- 커미션을 받는 경우 '영업사원'입니다.
-- 커미션을 받지 않는 경우 '일반사원'입니다.
*/
/*
-- manager_id는 정수형이므로 문자열로 변환 후 진행해야 합니다.
SELECT last_name, NVL(manager_id, 'No Manager')
FROM employees;
*/
SELECT last_name, NVL(TO_CHAR(manager_id), 'No Manager')
FROM employees;
/*
LAST_NAME NVL(TO_CHAR(MANAGER_ID, 'NOMANAGER')
---------------------------------------------------------------------------------------
King No Manager
Kochhar 100
De Haan 100
Hunold 102
...
*/
-- COALESCE
SELECT last_name, commission_pct, manager_id, COALESCE(commission_pct, manager_id, 1)
FROM employees;
/*
LAST_NAME COMMISSION_PCT M_ID COALESCE(..., MANAGER_ID, 1)
---------------------------------------------------------------------------------------------------
King ( null ) ( null ) 1
Kochhar ( null ) 100 100
De Haan ( null ) 100 100
Hunold ( null ) 102 102
...
-- commission_pct와 manager_id 둘 다 null 인 경우 1을 출력합니다.
-- commission_pct가 null 값이고 manager_id가 null 값이 아닌 경우 manager_id 값을 출력합니다.
*/
'Oracle Database' 카테고리의 다른 글
Database_23_일반 함수_조건 표현식_CASE, DECODE (0) | 2023.07.26 |
---|---|
Database_22_일반 함수_함수의 중첩 (0) | 2023.07.25 |
Database_20_변환 함수_TO_CHAR, TO_NUMBER, TO_DATE, RR (0) | 2023.07.23 |
Database_19_날짜 함수_ROUND, TRUNC (0) | 2023.07.22 |
Database_18_날짜 함수_MONTH_BETWEEN, ADD_MONTH, NEXT_DAY, LAST_DAY, EXTRACT (0) | 2023.07.21 |