

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# NVL2 함수
<a name="r_NVL2"></a>

지정하는 표현식의 평가 결과가 NULL 또는 NOT NULL인지 여부에 따라 두 값 중 하나를 반환합니다.

## 구문
<a name="r_NVL2-synopsis"></a>

```
NVL2 ( expression, not_null_return_value, null_return_value )
```

## 인수
<a name="r_NVL2-arguments"></a>

 * expression*   
NULL 상태로 평가되는 표현식(열 이름 등)입니다.

 *not\$1null\$1return\$1value*   
*expression*이 NOT NULL로 평가되면 반환되는 값입니다. *not\$1null\$1return\$1value* 값은 *expression*과 동일한 데이터 형식이거나, 혹은 묵시적으로 이 데이터 형식으로 변환 가능해야 합니다.

 *null\$1return\$1value*   
*expression*이 NULL로 평가되면 반환되는 값입니다. *null\$1return\$1value* 값은 *expression*과 동일한 데이터 형식이거나, 혹은 묵시적으로 이 데이터 형식으로 변환 가능해야 합니다.

## 반환 타입
<a name="r_NVL2-return-type"></a>

NVL2 반환 형식은 다음과 같이 결정됩니다.
+ *not\$1null\$1return\$1value* 또는 *null\$1return\$1value*이 NULL이면 not null 표현식의 데이터 형식이 반환됩니다.

*not\$1null\$1return\$1value*와 *null\$1return\$1value* 모두 NULL이 아닌 경우에는 다음과 같습니다.
+ *not\$1null\$1return\$1value*와 *null\$1return\$1value*의 데이터 형식이 동일하면 해당 데이터 형식이 반환됩니다.
+ *not\$1null\$1return\$1value*와 *null\$1return\$1value*의 숫자 데이터 형식이 다르면 가장 작으면서 호환도 가능한 숫자 데이터 형식이 반환됩니다.
+ *not\$1null\$1return\$1value*와 *null\$1return\$1value*의 날짜/시간 데이터 형식이 다르면 타임스탬프 데이터 형식이 반환됩니다.
+ *not\$1null\$1return\$1value*와 *null\$1return\$1value*의 문자 데이터 형식이 다르면 *not\$1null\$1return\$1value*의 데이터 형식이 반환됩니다.
+ *not\$1null\$1return\$1value*와 *null\$1return\$1value*의 데이터 형식이 숫자와 비숫자로 섞여 있으면 *not\$1null\$1return\$1value*의 데이터 형식이 반환됩니다.

**중요**  
*not\$1null\$1return\$1value*의 데이터 형식이 반환되는 마지막 두 경우에서는 *null\$1return\$1value*가 묵시적으로 해당 데이터 형식으로 변환됩니다. 이때 데이터 형식이 서로 호환되지 않으면 함수가 중단됩니다.

## 사용 노트
<a name="nvl2-usage-notes"></a>

*expression* 및 *search* 파라미터가 모두 null인 경우 NVL2와 유사한 방식으로 [DECODE 함수](r_DECODE_expression.md)을 사용할 수 있습니다. 차이점은, DECODE일 때는 *result* 파라미터의 값과 데이터 형식이 모두 반환되는 데 있습니다. 이와는 반대로 NVL2일 때는 *not\$1null\$1return\$1value* 또는 *null\$1return\$1value* 파라미터의 값 중에서 함수에서 선택하는 값과 함께 *not\$1null\$1return\$1value*의 데이터 형식이 반환됩니다.

예를 들어 column1이 NULL이라고 가정하면 다음 두 쿼리에서 동일한 값이 반환됩니다. 하지만 DECODE의 반환 값 데이터 형식은 INTEGER인 반면 NVL2의 반환 값 데이터 형식은 VARCHAR입니다.

```
select decode(column1, null, 1234, '2345');
select nvl2(column1, '2345', 1234);
```

## 예제
<a name="r_NVL2-examples"></a>

다음은 일부 샘플 데이터를 수정한 후 두 필드를 평가하여 적합한 사용자 연락처를 제공하는 예입니다.

```
update users set email = null where firstname = 'Aphrodite' and lastname = 'Acevedo';

select (firstname + ' ' + lastname) as name, 
nvl2(email, email, phone) AS contact_info
from users 
where state = 'WA'
and lastname  like 'A%'
order by lastname, firstname;

name			     contact_info	
--------------------+-------------------------------------------
Aphrodite Acevedo	(906) 632-4407
Caldwell Acevedo 	Nunc.sollicitudin@Duisac.ca
Quinn Adams		  vel@adipiscingligulaAenean.com
Kamal Aguilar		quis@vulputaterisusa.com
Samson Alexander	 hendrerit.neque@indolorFusce.ca
Hall Alford		  ac.mattis@vitaediamProin.edu
Lane Allen		   et.netus@risusDonec.org
Xander Allison	   ac.facilisis.facilisis@Infaucibus.com
Amaya Alvarado	   dui.nec.tempus@eudui.edu
Vera Alvarez		 at.arcu.Vestibulum@pellentesque.edu
Yetta Anthony		enim.sit@risus.org
Violet Arnold		ad.litora@at.com
August Ashley		consectetuer.euismod@Phasellus.com
Karyn Austin		 ipsum.primis.in@Maurisblanditenim.org
Lucas Ayers		  at@elitpretiumet.com
```