- 카테고리:
CASE¶
연속 “if-then-else” 문처럼 작동합니다. 보다 일반적인 형식에서는 일련의 조건이 순서대로 평가됩니다. 조건이 TRUE로 평가되면 평가가 중지되고 관련 결과(THEN 이후)가 반환됩니다. 어떤 조건도 TRUE로 평가되지 않는 경우, 선택적 ELSE 이후의 결과가 반환됩니다(있는 경우). 그렇지 않으면 NULL이 반환됩니다.
두 번째 “줄임” 형식의 경우, CASE 뒤의 식은 하나가 일치할 때까지 각 WHEN 식과 순서대로 비교됩니다. 그런 다음, 연결된 결과(THEN 이후)가 반환됩니다. 일치하는 식이 없으면 선택적 ELSE 이후의 결과가 반환됩니다(있는 경우). 그렇지 않으면 NULL이 반환됩니다.
두 번째 형식에서 NULL CASE 식은 WHEN 식 중 하나가 NULL인 경우에도 WHEN 식과 일치하지 않습니다.
- 참고 항목:
구문¶
CASE
WHEN <condition1> THEN <result1>
[ WHEN <condition2> THEN <result2> ]
[ ... ]
[ ELSE <result3> ]
END
CASE <expr>
WHEN <value1> THEN <result1>
[ WHEN <value2> THEN <result2> ]
[ ... ]
[ ELSE <result3> ]
END
인자¶
condition#
CASE
의 첫 번째 형식에서 각 조건은 BOOLEAN 값(True, False 또는 NULL)으로 평가되어야 하는 식입니다.expr
일반적인 식입니다.
value
CASE
의 두 번째 형식에서 각value
는expr
과 일치할 가능성이 있습니다.value
은 리터럴 또는 식일 수 있습니다.value
는expr
과 동일한 데이터 타입이거나expr
의 데이터 타입으로 캐스팅될 수 있는 데이터 타입이어야 합니다.result#
CASE
절의 첫 번째 형식에서condition#
가 true이면 함수는 해당result#
를 반환합니다. 둘 이상의 조건이 true이면 첫 번째 true 조건과 관련된 결과가 반환됩니다.CASE
문의 두 번째 형식에서value#
가expr
과 일치하면 해당result
가 반환됩니다. 둘 이상의value
가expr
과 일치하면 첫 번째 일치 값의result
가 반환됩니다.결과는 단일 값으로 평가되는 식이어야 합니다.
CASE
의 두 형식 모두에서, 선택적ELSE
절이 있고, 일치하는 항목이 없는 경우, 함수는ELSE
절에 결과를 반환합니다.ELSE
절이 없고, 일치하는 항목이 없으면 결과는 NULL입니다.
사용법 노트¶
DECODE 와 달리 조건의 NULL 값은 조건의 다른 위치에 있는 NULL 값과 일치하지 않습니다. 예를 들어,
WHEN <null_식> = NULL THEN 'Return me!'
은 “Return me!”를 반환하지 않습니다. NULL 값과 비교하려면IS NULL
대신= NULL
을 사용하십시오.condition#
,expr
,value
,result
는 모두 일반 식일 수 있으므로UNION
,INTERSECT
,EXCEPT
,MINUS
등의 세트 연산자를 포함하는 하위 쿼리를 포함할 수 있습니다. 세트 연산자를 사용할 때 데이터 타입이 호환되는지 확인하십시오. 자세한 내용은 세트 연산자 항목의 일반적인 사용법 노트 를 참조하십시오.
데이터 정렬 세부 정보¶
CASE
의 첫 번째 형식에서 각 식은 독립적이고, 다른 분기의 데이터 정렬 사양은 독립적입니다. 예를 들어, 다음에서 condition1
의 데이터 정렬 사양은 condition2
의 데이터 정렬 사양과 독립적이며, 이러한 데이터 정렬 사양은 동일하거나 호환될 필요도 없습니다.
CASE
WHEN <condition1> THEN <result1>
[ WHEN <condition2> THEN <result2> ]
CASE
의 두 번째 형식에서, 모든 데이터 정렬 관련 작업은 호환되는 데이터 정렬 사양을 사용해야 하지만, 데이터 정렬 사양이 동일할 필요는 없습니다. 예를 들어, 다음 문에서 value1
및 value2
의 데이터 정렬 사양은 둘 다 expr
의 데이터 정렬 사양과 호환되어야 하지만, value1
및 value2
의 데이터 정렬 사양은 서로 동일하거나 expr
의 데이터 정렬 사양과 동일할 필요는 없습니다.
CASE <expr> WHEN <value1> THEN <result1> [ WHEN <value2> THEN <result2> ] ...
함수에서 반환된 값은 THEN
/ELSE
인자 중 가장 우선 순위 가 높은 데이터 정렬을 갖습니다.
예¶
이는 CASE
의 일반적인 사용을 보여줍니다.
SELECT column1, CASE WHEN column1=1 THEN 'one' WHEN column1=2 THEN 'two' ELSE 'other' END AS result FROM (values(1),(2),(3)) v;출력:
+---------+--------+ | COLUMN1 | RESULT | |---------+--------| | 1 | one | | 2 | two | | 3 | other | +---------+--------+
이는 일치하는 값이 없고 ELSE
절이 없는 경우, 반환된 값이 NULL임을 보여줍니다.
SELECT column1, CASE WHEN column1=1 THEN 'one' WHEN column1=2 THEN 'two' END AS result FROM (values(1),(2),(3)) v;출력:
+---------+--------+ | COLUMN1 | RESULT | |---------+--------| | 1 | one | | 2 | two | | 3 | NULL | +---------+--------+
이 예는 NULL을 명시적으로 처리합니다.
SELECT column1, CASE WHEN column1 = 1 THEN 'one' WHEN column1 = 2 THEN 'two' WHEN column1 IS NULL THEN 'NULL' ELSE 'other' END AS result FROM VALUES (1), (2), (NULL);출력:
+---------+--------+ | COLUMN1 | RESULT | |---------+--------| | 1 | one | | 2 | two | | NULL | NULL | +---------+--------+
다음 예는 CASE
와 데이터 정렬을 결합합니다.
SELECT CASE COLLATE('m', 'upper') WHEN 'M' THEN TRUE ELSE FALSE END; +----------------------------+ | CASE COLLATE('M', 'UPPER') | | WHEN 'M' THEN TRUE | | ELSE FALSE | | END | |----------------------------| | True | +----------------------------+ SELECT CASE 'm' WHEN COLLATE('M', 'lower') THEN TRUE ELSE FALSE END; +------------------------------------------+ | CASE 'M' | | WHEN COLLATE('M', 'LOWER') THEN TRUE | | ELSE FALSE | | END | |------------------------------------------| | True | +------------------------------------------+