CASE 문을 이용해 데이터를 변환 할 수 있다. 임의의 조건에 따라 독자적으로 변환 처리를 지정해 데이터를 변환하고 싶은 경우 CASE 문을 이용한다.
CASE WHEN 조건식1 THEN 식1 [WHEN 조건식2 THEN 식2] [ELSE 식3] END
ELSE NULL
)CASE로 NULL 값을 0으로 변환
SELECT a, CASE WHEN a IS NULL THEN 0 ELSE a END "a(null=0)" FROM sample37;
SELECT a, COALESCE(a,0) FROM sample37;
주어진 인수 중 NULL이 아닌 값에 대해서는 가장 먼저 지정된 인수의 값을 반환한다.
숫자로 이루어진 코드를 알아보기 쉽게 문자열로 변환하고 싶은 경우 CASE 문을 많이 사용한다.
WHEN a=1 THEN '남자'
WHEN a=2 THEN '여자'
CASE 문에는 2개의 구문이 있다!
CASE 식 WHEN 식 THEN 식...
CASE 식1 WHEN 식2 THEN 식3 [WHEN 식4 THEN 식5] [ELSE 식6] END
식1의 값이 식2의 값과 동일한지 비교 -> 값이 같아면 식3의 값이 CASE 문 전체의 결과값으로 반환
SELECT a AS '코드',
CASE a
WHEN 1 THEN '남자'
WHEN 2 THEN '여자'
ELSE '미지정'
END AS '성별' FROM sample37;
CASE 문은 WHERE구의 조건식 일부, ORDER BY, SELECT 등에서 사용이 가능하다.
ELSE NULL , 대응하는 WHEN이 하나도 없으면 ELSE 절이 사용되며 NULL이 반환된다.
ELSE는 생략하지 않는 편이 낫다!
단순 CASE에서는 각 조건이 =
로 비교를 지정하므로 NULL 값의 비교가 정상적으로 작동하지 않는다. 즉, NULL 값인지 아닌지를 판정하기 위해 IS NULL을 사용한 검색 CASE문을 사용해야 한다.