DECODE

DECODE

DECODE()는 선택 표현식(select expression)을 각 검색 표현식(search expression)과 순서대로 비교해요. 검색 표현식이 선택 표현식과 일치하는 즉시 해당하는 결과 표현식을 반환해요.

Snowflake의 DECODE는 데이터를 다른 인코딩으로 변환하는 PostgreSQL의 DECODE 함수와 달라요.

출처: Snowflake SQL Reference

본문

문법

DECODE( <expr> , <search1> , <result1> [ , <search2> , <result2> ... ] [ , <default> ] )

인자

expr

'선택 표현식(select expression)'이에요. '검색 표현식들'이 이 선택 표현식과 비교되고, 일치하면 DECODE는 그 검색 표현식에 해당하는 결과를 반환해요. 선택 표현식은 일반적으로 열이지만, 서브쿼리, 리터럴 또는 다른 표현식일 수도 있어요.

searchN

검색 표현식들은 선택 표현식과 비교할 값을 나타내요. 이 검색 표현식 중 하나라도 일치하면 함수는 해당 결과를 반환해요. 여러 검색 표현식이 일치하면 첫 번째 일치의 결과만 반환돼요.

resultN

결과들은 검색 표현식 중 하나가 선택 표현식과 일치할 때 반환될 값이에요.

default

선택적인 기본값이 지정되고, 검색 표현식 중 어느 것도 선택 표현식과 일치하지 않으면 DECODE는 이 기본값을 반환해요.

사용 지침

  • CASE와 달리, 선택 표현식의 NULL 값은 검색 표현식의 NULL 값과 일치해요.

  • expr은 UNION, INTERSECT, EXCEPT, MINUS 같은 집합 연산자를 포함할 수 있어요. 집합 연산자를 사용할 때는 데이터 타입이 호환되는지 확인하세요. 자세한 내용은 집합 연산자(Set operators) 문서의 일반 사용 지침(General usage notes)을 참고하세요.

콜레이션 세부사항

  • 선택 표현식과 검색 표현식들의 콜레이션 사양은 모두 호환되어야 해요.

  • 함수에서 반환되는 값은 우선순위(precedence)가 가장 높은 콜레이션을 가진 결과의 콜레이션 사양을 유지해요.

예제

테이블을 만들고 행을 삽입:

CREATE TABLE d (column1 INTEGER);
INSERT INTO d (column1) VALUES
    (1),
    (2),
    (NULL),
    (4);

기본값 'other'가 있는 예제(NULL은 NULL과 일치함에 유의):

SELECT column1, decode(column1,
                       1, 'one',
                       2, 'two',
                       NULL, '-NULL-',
                       'other'
                      ) AS decode_result
    FROM d;
+---------+---------------+
| COLUMN1 | DECODE_RESULT |
|---------+---------------|
|       1 | one           |
|       2 | two           |
|    NULL | -NULL-        |
|       4 | other         |
+---------+---------------+

기본값이 없는 예제(일치하지 않는 값은 NULL을 반환함에 유의):

SELECT column1, decode(column1,
                       1, 'one',
                       2, 'two',
                       NULL, '-NULL-'
                       ) AS decode_result
    FROM d;
+---------+---------------+
| COLUMN1 | DECODE_RESULT |
|---------+---------------|
|       1 | one           |
|       2 | two           |
|    NULL | -NULL-        |
|       4 | NULL          |
+---------+---------------+

더 알아보기