원하는 기간까지 원하는 시간 간격으로 Row생성하기? 1 7 1,204

by 동동동 [SQL Query] [2017.02.09 15:17:29]


안녕하세요..

2017년 1월 2일부터 3월까지 토,일요일은 제외하고 09시 부터 17시 까지 30분 간격으로 row를 임의로 생성하려고 하면 어떻게 해야 하는지요??

결과

20170102    0900

20170102    0930

20170102    1000

....

20170331    1700

 

도움 부탁드립니다...

by jkson [2017.02.09 15:35:42]

약간 애매한데.. 임의의 ROW라는 게 정확히 어떤 걸 말씀하시는지.. 그냥 시간만 원하시는 건지..

시간만 원하시는 거면

SELECT DT + LV - 1 DT
  FROM (SELECT TO_DATE('2017-01-02') + 9 / 24 + (1 / 24 / 2) * (LEVEL - 1) DT
          FROM DUAL CONNECT BY LEVEL <= 18)
     , (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 33)
 WHERE TO_CHAR(DT + LV - 1, 'D') NOT IN ('1', '7')
ORDER BY DT

 


by 동동동 [2017.02.09 16:08:37]

답변 감사드립니다..^^


by jkson [2017.02.09 16:37:42]

아 3월까지네요. 왜 2월 3일까지로 봤지?ㅋㅋ; 헐 시간도 5시까지네요. 왜 5시 30분으로..; 난독 증상이..;

SELECT TRUNC(DT + LV - 1) DT ,TO_CHAR(DT + LV - 1,'HH24MI') HR  
  FROM (SELECT TO_DATE('2017-01-02') + 9 / 24 + (1 / 24 / 2) * (LEVEL - 1) DT
          FROM DUAL CONNECT BY LEVEL < 18)
     , (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 90)
 WHERE TO_CHAR(DT + LV - 1, 'D') NOT IN ('1', '7')
ORDER BY DT, HR

 


by 랑에1 [2017.02.09 15:53:00]
SELECT dt
FROM 
(
  SELECT  TO_DATE('20170102', 'yyyymmdd') +(((level*0.5) -0.5) /24) dt FROM dual
  CONNECT BY TO_DATE('20170102', 'yyyymmdd') +(((level*0.5) -0.5) /24) <= TO_DATE('20170331', 'yyyymmdd') + 0.99999
)
WHERE TO_CHAR(dt, 'd') NOT IN ('1','7')    
AND   TO_CHAR(dt, 'hh24mi') BETWEEN '0900' AND '1700'      
ORDER BY dt       

이래저래 짜집기 해봤습니다 ㅋㅋ


by 동동동 [2017.02.09 16:08:44]

답변 감사드립니다..^^


by 마농 [2017.02.09 16:28:45]
SELECT dt, tm
  FROM (SELECT TO_CHAR(sdt + LEVEL - 1, 'yyyymmdd') dt
          FROM (SELECT TO_DATE('20170102', 'yyyymmdd') sdt  -- 시작일
                     , TO_DATE('20170331', 'yyyymmdd') edt  -- 종료일
                  FROM dual
                )
         WHERE TO_CHAR(sdt + LEVEL - 1, 'd') NOT IN ('1', '7')
         CONNECT BY LEVEL <= edt - sdt + 1
        )
     , (SELECT TO_CHAR(stm + (LEVEL-1)/24/60 * itv, 'hh24mi') tm
          FROM (SELECT TO_DATE('0900', 'hh24mi') stm  -- 시작시간
                     , TO_DATE('1700', 'hh24mi') etm  -- 종료시간
                     , 30 itv                         -- 시간간격(분)
                  FROM dual
                )
         CONNECT BY LEVEL <= (etm - stm)*24*60 / itv + 1
        )
;

 


by 동동동 [2017.02.09 17:48:39]

답글 감사드립니다..^^

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