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