ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    댓글

Designed by Tistory.