DECODE 함수 - Amazon Redshift

DECODE 함수

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

구문

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

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

파라미터

expression

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

search

숫자 값이나 문자열 같이 소스 표현식과 비교할 대상 값입니다. 검색 표현식은 단일 고정 값으로 평가되어야 합니다. age between 20 and 29 같이 범위 값으로 평가되는 표현식은 지정할 수 없습니다. 이런 경우에는 변경할 값마다 검색/결과 페어를 별도로 지정해야 합니다.

모든 검색 표현식 인스턴스의 데이터 형식은 동일하거나 호환 가능해야 합니다. expressionsearch 파라미터 역시 호환 가능해야 합니다.

result

표현식이 검색 값과 일치할 때 쿼리가 반환하는 변경 값입니다. DECODE 표현식에는 검색/결과 페어가 하나 이상 포함되어야 합니다.

모든 결과 표현식 인스턴스의 데이터 형식은 동일하거나 호환 가능해야 합니다. resultdefault 파라미터 역시 호환 가능해야 합니다.

기본값

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

사용 노트

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

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

다음은 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)