DECODE
구문
DECODE(expr, search, result [, search, result ]... [, default ])
목적
DECODE 함수는 expr을 하나씩 각 search 값과 비교합니다. 만약 expr이 search와 같다면, Oracle Database는 해당하는 result를 반환합니다. 일치하는 결과가 없을 경우, Oracle은 default를 반환합니다. default가 생략된 경우, Oracle은 null을 반환합니다.
인수들은 숫자 형식(NUMBER, BINARY_FLOAT, 또는 BINARY_DOUBLE) 또는 문자 형식 중 하나일 수 있습니다.
- 만약 expr과 search가 문자 데이터인 경우, Oracle은 비패딩 비교 세맨틱을 사용하여 비교합니다. expr, search, 그리고 result는 CHAR, VARCHAR2, NCHAR 또는 NVARCHAR2 데이터 유형 중 하나일 수 있습니다. 반환되는 문자열은 VARCHAR2 데이터 유형이며, 첫 번째 result 매개변수와 동일한 문자 집합(character set)으로 구성됩니다.
- 만약 첫 번째 search-result 쌍이 숫자인 경우, Oracle은 모든 search-result 표현식과 첫 번째 expr을 비교하여 가장 높은 숫자 우선 순위를 가지는 인수를 결정하고, 나머지 인수를 해당 데이터 유형으로 암묵적으로 변환하여 해당 데이터 유형을 반환합니다.
search, result, default 값들은 표현식에서 유도될 수 있습니다. Oracle Database는 단축 평가(short-circuit evaluation)를 사용합니다. 데이터베이스는 각 search 값들을 expr과 비교하기 전에만 평가하며, 모든 search 값들을 expr과 비교하기 전에 모두 평가하지 않습니다. 그 결과, Oracle은 이전 search가 expr과 동일한 경우 이후의 search를 평가하지 않습니다.
Oracle은 expr과 각 search 값을 자동으로 첫 번째 search 값의 데이터 유형으로 변환한 후에 비교합니다. Oracle은 반환 값도 첫 번째 result의 데이터 유형과 동일하게 자동으로 변환합니다. 만약 첫 번째 result의 데이터 유형이 CHAR이거나 첫 번째 result가 null인 경우, Oracle은 반환 값도 VARCHAR2 데이터 유형으로 변환합니다.
DECODE 함수에서 Oracle은 두 개의 null을 동등하다고 간주합니다. 만약 expr이 null인 경우, Oracle은 null인 첫 번째 search의 result를 반환합니다.
DECODE 함수의 최대 구성 요소 수는 expr, searches, results, 그리고 default를 포함하여 255개입니다.
참고:
- Data Type Comparison Rules는 데이터 유형 비교 규칙에 대한 정보를 제공합니다.
- Data Conversion는 일반적인 데이터 유형 변환에 대한 정보를 제공합니다.
- Floating-Point Numbers는 부동 소수점 비교 의미론에 대한 정보를 제공합니다.
- Implicit and Explicit Data Conversion는 암시적 변환의 단점에 대한 정보를 제공합니다.
- COALESCE and CASE Expressions는 DECODE와 유사한 기능을 제공합니다.
- Oracle Database Globalization Support Guide의 부록 C는 DECODE가 expr과 search의 문자를 비교하는 데 사용하는 정렬(collation) 결정 규칙에 대한 정보를 제공합니다.
예제
이 예제는 warehouse_id의 값을 디코드합니다. 만약 warehouse_id가 1이라면, 함수는 'Southlake'를 반환하고, 만약 warehouse_id가 2라면 'San Francisco'를 반환합니다. 그리고 이와 같은 방식으로 계속 진행됩니다. 만약 warehouse_id가 1, 2, 3, 4 중 하나가 아니라면, 함수는 'Non domestic'을 반환합니다.
SELECT product_id,
DECODE (warehouse_id, 1, 'Southlake',
2, 'San Francisco',
3, 'New Jersey',
4, 'Seattle',
'Non domestic') "Location"
FROM inventories
WHERE product_id < 1775
ORDER BY product_id, "Location";
출처: 오라클 레퍼런스
원문 링크: Oracle DECODE 함수 문서
'코딩 > 오라클 함수' 카테고리의 다른 글
[오라클 레퍼런스 함수] DENSE_RANK - 중복된 순위를 건너뛰지 않고 순위 계산 (예) 1-2-2-3 (0) | 2023.08.04 |
---|---|
[오라클 레퍼런스 함수] DECOMPOSE - Unicode 분해 적용 결과 반환 (0) | 2023.08.04 |
[오라클 레퍼런스 함수] DBTIMEZONE - 데이터베이스의 시간대(time zone) 값을 반환 (0) | 2023.08.03 |
[오라클 레퍼런스 함수] DATAOBJ_TO_PARTITION - 절대적인 파티션 번호를 반환 (0) | 2023.08.03 |
[오라클 레퍼런스 함수] DATAOBJ_TO_MAT_PARTITION - 머티리얼 파티션 번호 반환 (0) | 2023.08.03 |
댓글