

 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/)을 참조하세요.

# DECODE 함수
<a name="r_DECODE_expression"></a>

DECODE 표현식은 등식 조건의 결과에 따라 특정 값을 다른 특정 값이나 기본값으로 변경합니다. 이 연산은 단순 CASE 표현식이나 IF-THEN-ELSE 문의 연산과 동일합니다.

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

```
DECODE ( expression, search, result [, search, result ]... [ ,default ] )
```

이러한 유형의 표현식은 테이블에 저장된 축약어나 코드를 보고서에 필요한 유의적인 비즈니스 값으로 변경하는 데 유용합니다.

## 파라미터
<a name="r_DECODE_expression-parameters"></a>

 * expression*   
테이블 열과 같이 비교하고자 하는 값의 소스입니다.

 *검색*   
숫자 값이나 문자열 같이 소스 표현식과 비교할 대상 값입니다. 검색 표현식은 단일 고정 값으로 평가되어야 합니다. `age between 20 and 29` 같이 범위 값으로 평가되는 표현식은 지정할 수 없습니다. 이런 경우에는 변경할 값마다 검색/결과 페어를 별도로 지정해야 합니다.  
모든 검색 표현식 인스턴스의 데이터 형식은 동일하거나 호환 가능해야 합니다. *expression*과 *search* 파라미터 역시 호환 가능해야 합니다.

 * - 결과*   
표현식이 검색 값과 일치할 때 쿼리가 반환하는 변경 값입니다. DECODE 표현식에는 검색/결과 페어가 하나 이상 포함되어야 합니다.  
모든 결과 표현식 인스턴스의 데이터 형식은 동일하거나 호환 가능해야 합니다. *result*와 *default* 파라미터 역시 호환 가능해야 합니다.

 *기본값*   
검색 조건이 맞지 않는 경우 사용하는 기본값(옵션)입니다. 기본값을 지정하지 않으면 DECODE 표현식은 NULL을 반환합니다.

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

*expression* 값과 *search* 값이 모두 NULL이면 DECODE 결과는 해당하는 *result* 값이 됩니다. 이러한 함수 사용에 대한 설명은 예 섹션을 참조하세요.

이러한 방식으로 사용할 때는 DECODE가 [NVL2 함수](r_NVL2.md)과 비슷하지만 몇 가지 차이점도 있습니다. 차이점에 대한 자세한 내용은 NVL2 사용 시 주의 사항을 참조하세요.

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

다음은 datetable의 caldate 열에 `2008-06-01` 값이 존재할 때 이 값을 `June 1st, 2008`로 변경하는 예입니다. 그 밖에 모든 caldate 값은 NULL로 바뀝니다.

```
select decode(caldate, '2008-06-01', 'June 1st, 2008')
from datetable where month='JUN' order by caldate;

case
----------------
June 1st, 2008

...
(30 rows)
```

다음은 DECODE 예를 사용하여 CATEGORY 테이블에서 축약된 CATNAME 열 5개를 전체 이름으로 변경하고 해당 열의 나머지 값은 `Unknown`으로 변경하는 예입니다.

```
select catid, decode(catname,
'NHL', 'National Hockey League',
'MLB', 'Major League Baseball',
'MLS', 'Major League Soccer',
'NFL', 'National Football League',
'NBA', 'National Basketball Association',
'Unknown')
from category
order by catid;

catid  |	case
-------+---------------------------------
1      | Major League Baseball
2      | National Hockey League
3      | National Football League
4      | National Basketball Association
5      | Major League Soccer
6      | Unknown
7      | Unknown
8      | Unknown
9      | Unknown
10     | Unknown
11     | Unknown
(11 rows)
```

다음은 DECODE 표현식을 사용하여 Colorado와 Nevada에서 VENUESEATS 열에 NULL 값을 가진 장소를 찾아 NULL 값을 0으로 변경하는 예입니다. VENUESEATS 열에 NULL 값이 없으면 결과로 1을 반환합니다.

```
select venuename, venuestate, decode(venueseats,null,0,1)
from venue
where venuestate in('NV','CO')
order by 2,3,1;

venuename	              | venuestate     | case
------------------------------+----------------+-----------
Coors Field                   |	CO	       |   1
Dick's Sporting Goods Park    |	CO	       |   1
Ellie Caulkins Opera House    |	CO	       |   1
INVESCO Field		      |	CO	       |   1
Pepsi Center		      |	CO	       |   1
Ballys Hotel		      |	NV	       |   0
Bellagio Hotel                |	NV	       |   0
Caesars Palace                |	NV	       |   0
Harrahs Hotel                 |	NV	       |   0
Hilton Hotel                  |	NV	       |   0
...						
(20 rows)
```