NVL2
Syntax
NVL2(expr1, expr2, expr3)
개요
NVL2 함수는 첫 번째 인자가 NULL이 아닐 경우 두 번째 인자의 값을 반환하고, 만약 첫 번째 인자가 NULL이면 세 번째 인자의 값을 반환한다.
두 번째와 세 번째 인자는 동일한 범주의 타입이어야 하며, 필요한 경우 암묵적 형 변환을 수행하는 별도 변형 함수가 존재한다.
파라미터
파라미터
설명
expr1
평가할 첫 번째 값이다. 이 값이 NULL이 아닐 경우 두 번째 인자를 반환하는 기준이 된다.
expr2
첫 번째 인자가 NULL이 아닐 경우 반환될 값이다.
expr3
첫 번째 인자가 NULL일 경우 반환될 값이다;
두 번째와 세 번째 인자의 타입은 일치해야 하며, 필요 시 형 변환이 이루어진다.
예제
# 테스트 데이터
create table employees (
first_name varchar,
last_name varchar,
salary integer,
hire_date timestamptz,
commission_pct integer,
bonus integer,
status varchar
);
INSERT INTO employees (first_name, last_name, salary, hire_date, commission_pct, bonus, status) VALUES
('John', 'Doe', 55000, '2020-03-15 09:00:00', NULL, 2000, 'Active'),
('Jane', 'Smith', 62000, '2019-07-22 10:30:00', 10, 3000, 'Active'),
('Michael', 'Johnson', 72000, '2018-11-10 08:45:00', 7, 2500, 'Inactive'),
('Emily', 'Davis', 48000, '2021-05-01 12:00:00', NULL, 1500, NULL),
('David', 'Wilson', 53000, '2017-09-17 14:20:00', 8, 2200, NULL),
('Sarah', 'Brown', 60000, '2016-12-05 09:15:00', 12, 2800, 'Active'),
('James', 'Taylor', 75000, '2015-06-30 16:45:00', NULL, 2600, 'Resigned'),
('Jessica', 'Martinez', 68000, '2022-01-25 11:10:00', 5, 1800, NULL),
('Daniel', 'Anderson', 58000, '2020-10-05 13:35:00', 6, 2000, 'Active'),
('Laura', 'Thomas', 49500, '2023-08-12 08:00:00', 4, 1200, 'Probation');
# 테스트 1
-- commission_pct 값이 NULL이 아니면 bonus 값을, NULL이면 0을 반환함
SELECT oracle.NVL2(commission_pct, bonus, 0)
FROM employees;
nvl2
------
0
3000
2500
0
2200
2800
0
1800
2000
1200
(10 rows)
# 테스트 2
-- 첫 번째 인자가 NULL이 아니면 두 번째 인자(예: 'Active')를, NULL이면 세 번째 인자(예: 'Inactive')를 반환함
SELECT oracle.NVL2(status, 'Active', 'Inactive')
FROM employees;
nvl2
----------
Active
Active
Active
Inactive
Inactive
Active
Active
Inactive
Active
Active
(10 rows)
Last updated