Oracle Case
종료일과 현재일을 비교하여 완료된 상태인지..지연 상태인지 확인할 수 있는 쿼리가 필요 했다.
찾아보니.. CASE 라는 넘이 있었네...
RPG게임을 진행한다고 치자...
플레이어에게 일정 기간내게 수행해야할 미션을 주고 플레이어 상태를 본다고 가정해보자.
미션에 긴박감을 주기 위해 종료일이 긴박했을 경우 알림창을 띄우도록 하자.
1. 다음 테이블의 구조를 가지고 있으며
LEVEL_PROGRESS
|_ user_id : 플레이어 ID
|_ part : 레벨명
|_ end_date : 레벨업을 위한 완료일 ( 해당 기간내에 미션을 클리어 해야함 )
|_ complete_date : 레벨 종료 여부 ( 종료일을 기록 )
2. 다음 데이터를 가지고 있다.
userId, 'ONE', date, date - ONE 단계를 완료 했다.
userId, 'TWO, date, - TWO 단계를 진행중이다.
3. 쿼리로 현재일과 종료일을 비교하여 현 상태를 나타내고자 한다.
SELECT end_date,complete_date
DECODE(part,'ONE','LEVEL1','TWO','LEVEL2') levelName,
DECODE(part,'ONE',DECODE(complete_date,null,
(
CASE
WHEN to_char(sysdate,'YYYY-MM-DD') <= to_char(end_date,'YYYY-MM-DD') THEN '진행중'
ELSE '지연'
END ),
'레벨업완료')) STEP1,
DECODE(part,'TWO',DECODE(complete_date,null,
(
CASE
WHEN to_char(sysdate,'YYYY-MM-DD') <= to_char(end_date,'YYYY-MM-DD') THEN '진행중'
ELSE '지연'
END ),
'레벨업완료')) STEP2
FROM LEVEL_PROGRESS WHERE user_id= 'userId'
각 레벨별 현황을 보여주기 위한 쿼리가 완성되었다.
CASE 문 사용하는 것을 알기 위한 것이므로... 멋스럽게 다듬는것은 알아서~~ ^^
이하 펀글