CASE 수식은 CUBRID 문장 내에서 조건에 따라서 변하는 값을 얻고자 할 때 사용된다. CASE 수식은 하나 또는 그 이상의 비교 수식과 값 수식이나 쿼리를 참인지 비교한다. 참이면 정해진 수식이나 NULL 값을 반환한다.
CASE 수식 문법으로 다음과 같은 네 가지 형태가 지원된다.
CASE
control_expression simple_when_list
[ else_clause ]
END
CASE
searched_when_list
[ else_clause ]
END
NULLIF
( expression_comma_list )
COALESCE
( expression_comma_list )
simple_when
:
WHEN expression THEN result
searched_when
:
WHEN search_condition THEN result
else_clause
:
ELSE result
result
:
expression | NULL
CASE 문은 하나 또는 그 이상의 simple_when 절이나 하나 또는 그 이상의 searched_when 절을 포함한다. NULLIF와 COALESCE 문장은 특정 형태의 조건식으로 사용될 수 있다. 각각의 CASE 문장에서 모든 WHEN 절은 simple_when 절 형태이거나 searched_when 절 형태를 가져야 하며 이 둘을 함께 사용할 수는 없다. CASE 문은 반드시 키워드 END로 끝나야 한다.
처음으로 WHEN 절의 조건이 만족되는 THEN 절의 수식 값이 CASE 수식의 값이 된다. simple_when 절은 WHEN 수식의 값이 CASE 문의 control_expression의 값과 같을 때 만족된다. searched_when 절은 해당 search_condition이 참이 되면 만족된다. 어떠한 WHEN 절도 만족되지 않으면, ELSE 절의 값이 CASE 수식의 값이 된다. ELSE 절이 생략된 경우에는 ELSE NULL 절이 주어진 것으로 가정한다.
simple_when 절을 사용한 CASE 수식을 사용하기 위해서는 모든 WHEN 절의 수식이 가지는 데이터 타입이 control_expression의 데이터 타입과 비교 가능해야 한다. 마찬가지로 모든 THEN 절의 수식의 데이터 타입 역시 비교 가능해야 한다. 하지만, WHEN 절과 THEN 절의 데이터 타입이 서로 비교 가능해야 할 필요는 없다.
CASE 수식이 반환하는 값의 데이터 타입은 다음과 같은 규칙에 따라 THEN 절과 선택 사항인 ELSE 절의 데이터 타입에 좌우된다.
모든 THEN 절의 데이터 타입이 같으면, 해당 타입이 CASE 문의 데이터 타입이 된다.
THEN 절의 데이터 타입이 같지 않지만 비교 가능한 경우에는, THEN 절의 데이터 타입 중 가장 일반적인 타입이 CASE 문의 데이터 타입이 된다.
어느 하나라도 THEN 절의 타입이 가변 길이의 문자 스트링 또는 비트 스트링인 경우, 결과는 가변 길이가 된다. 가변 길이 스트링이 하나도 쓰이지 않은 경우에는 가장 긴 길이를 가지는 문자 스트링 또는 비트 스트링이 결과로 반환된다.
모든 THEN 절의 타입이 근사값으로 표현되는 수치형이 아니면 결과로 정확한 수치형이 반환된다. 소수점 이하 자릿수는 가장 큰 소수점 이하 자릿수로 결정된다.
결과의 자릿수는 CASE 문의 모든 THEN 절에서 명시된 것들의 가장 작은 것부터 가장 큰 것까지 모두를 포함할 수 있도록 결정된다.
다음은 선수의 성별이 M이면 'MAN'을 W면 'WOMAN'을 출력하는 예제이다.
SELECT name,
CASE WHEN gender = 'M' THEN 'MAN'
WHEN gender = 'W'
THEN 'WOMAN'
END as GENDER
FROM athlete;