-
[ORACLE] 이중 CASE문 예제DATABASE 2019. 2. 14. 15:26
▶ 이중 CASE문◀
▷ 현재일을 기준으로 시작일과 종료일 비교하여 데이터 추출하기
1. 영역 잡기 (종료일 이후 또는 시작일 이전을 메인조건으로 잡을건지)
시작일 (start_dt)
현재일 (sysdate)
종료일 (end_date)
CASE WHNE sysdate > end_date then 'after' -- 종료일이후 [메인CASE]
.... (시작일과 현재일 case문)
END as staus
2. 내부 CASE문
시작일 (start_dt)
현재일 (sysdate)
종료일 (end_date)
CASE WHEN sysdate > end_date then 'after'
ELSE
CASE WHEN sysdate >= start_dt then 'often' -- 현재일 >= 시작일
ELSE 'before' -- 시작일이전
END
END as staus
※ 보충예제 ※
☞ 데이터 변환
TO_CHAR(SYSDATE,'YYYYMMDDHH24MM') 년도월일시(0~24)분
select start_dt, end_dt
case when to_char(sysdate,'YYYYMMDDHH24MM') > to_char(max(end_dt),'YYYYMMDD')||max(end_time) then 'after'
else
case when to_char(sysdate,'YYYYMMDDHH24MM') >= to_char(min(start_dt),'YYYYMMDD')||min(start_time) then 'open'
else 'before'
end
end as staus
from com100tl
where cal_cd ='EEX05U'
▼
▼
sysdate , start_dt, end_dt의 데이터변환값을 공통으로 쓰기위해 서브쿼리로 작성하여
CASE문을 간결하게 작성함
▼
▼
select start_date, sys_date ,end_date,
case when sys_date > end_date then 'after'
else
case when sys_date >= start_date then 'open'
else 'before'
end
end as staus
from
(select
max(to_char(end_dt,'YYYYMMDD')||end_time) as end_date,
min(to_char(start_dt,'YYYYMMDD')||start_time) as start_date,
to_char(sysdate+90,'YYYYMMDDHH24MM') as sys_date
from com100tl
where cal_cd = 'EEX05U')
'DATABASE' 카테고리의 다른 글
[ORACLE] LEFT OUTER JOIN 개념 (0) 2019.09.11 [ORACLE] OUTER JOIN 예제 (0) 2019.06.13 [ORACLE] 계층형 쿼리 (0) 2019.01.10 [ORACLE] 특정문자의 개수 알아보기 (0) 2018.12.18 [MYSQL] SUBSTRING_INDEX 문자열 자르기 (0) 2018.12.13