[오라클] 시간표를 10분단위로 쪼개고 싶은데 가능할까요? 0 2 587

by 채채 [2019.01.17 14:09:58]


사원번호  적용일       날짜   AMPM  시간간격  시작시간 종료시간 

6482       20190115    2(월)    0           10       830      1300    
6482       20190115    2(월)    1           10       1400     1730       
6482       20190115    3(화)    0           10       830      1300       
6482       20190115    3(화)    1           10       1400     1730      
6482       20190115    4(수)    0           10       830      1300      
6482       20190115    4(수)    1           10       1400     1730      
6482       20190115    5(목)    0           10       830      1300    
6482       20190115    5(목)    1           10       1400     1730      
6482       20190115    6(금)    0           10       830      1300       
6482       20190115    6(금)    1           10       1400     1730       
6482       20190115    7(토)    0           10       830      1230    

이런식으로 사원별로 시간표 테이블이 있는데요

저 시간간격 기준으로  나눠서 조회하는 방법이 있을까요?

예를들어서

6482 20190155 월 오전 830  840

6482 20190155 월 오전 840  850

6482 20190155 월 오전 850  900

6482 20190155 월 오전 910  920

이런식으로 풀어서 조회를해야합니다... 가능할까요 도움부탁드립니다.

by 마농 [2019.01.17 16:35:41]
WITH t AS
(
SELECT 6482 eno, '20190115' dt, '2(월)' dy, 0 ampm, 10 itv, 830 stm, 1300 etm FROM dual
UNION ALL SELECT 6482, '20190115', '2(월)', 1, 10, 1400, 1730 FROM dual
UNION ALL SELECT 6482, '20190115', '3(화)', 0, 10,  830, 1300 FROM dual
UNION ALL SELECT 6482, '20190115', '3(화)', 1, 10, 1400, 1730 FROM dual
UNION ALL SELECT 6482, '20190115', '4(수)', 0, 10,  830, 1300 FROM dual
UNION ALL SELECT 6482, '20190115', '4(수)', 1, 10, 1400, 1730 FROM dual
UNION ALL SELECT 6482, '20190115', '5(목)', 0, 10,  830, 1300 FROM dual
UNION ALL SELECT 6482, '20190115', '5(목)', 1, 10, 1400, 1730 FROM dual
UNION ALL SELECT 6482, '20190115', '6(금)', 0, 10,  830, 1300 FROM dual
UNION ALL SELECT 6482, '20190115', '6(금)', 1, 10, 1400, 1730 FROM dual
UNION ALL SELECT 6482, '20190115', '7(토)', 0, 10,  830, 1230 FROM dual
)
SELECT eno, dt, dy, ampm, itv
     , TO_NUMBER(TO_CHAR(s + (lv-1)*10 /24/60, 'hh24mi')) stm
     , TO_NUMBER(TO_CHAR(s + (lv-0)*10 /24/60, 'hh24mi')) etm
     , lv
  FROM (SELECT eno, dt, dy, ampm, itv, stm, etm
             , TO_DATE(LPAD(stm, 4, '0'), 'hh24mi') s
             , TO_DATE(LPAD(etm, 4, '0'), 'hh24mi') e
          FROM t
        )
     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 99)
 WHERE lv <= (e - s) * 24*60 / 10
 ORDER BY eno, dt, dy, ampm, lv
;

 


by 채채 [2019.01.18 08:31:11]

감사합니다 참고해서 해봐야겠네요!!! 이번에도 감사합니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입