오라클 쿼리 질문이요 0 1 534

by 탑개발자 [SQL Query] [2020.01.01 18:34:37]


등록된 날짜가 오늘 기준으로 얼마나 지난 글인지 확인하는 건데 지난 기간에서 주말이 포함되면 제외하고 계산 하는 쿼리좀 부탁 드려요 

Ex)  날짜 필드에 2019-12-30 11:20:50  이면 30일이 월요일이니까 

      화요일날 쿼리를 2019-12-31 14:30:40 초에 쿼리를 조회하면   결과가 1일 3시간 10분 초가 라고 표시되고 

      수요일날  쿼리를 2020-01-01 14:30:40 초에 쿼리를 조회하면   결과가 2일 3시간 10분 초가 라고 표시되고 

      목요일날  쿼리를 2020-01-02 15:30:40 초에 쿼리를 조회하면   결과가 3일 4시간 10분 초가 라고 표시되고 

      금요일날  쿼리를 2020-01-03 16:40:40 초에 쿼리를 조회하면   결과가 4일 5시간 20분 초가 라고 표시되고 

      토요일날  쿼리를 2020-01-04 16:40:40 초에 쿼리를 조회하면   결과가 4일 5시간 20분 초가 라고 표시되고 (주말은 포함 안됨)

      일요일날  쿼리를 2020-01-05 16:40:40 초에 쿼리를 조회하면   결과가 4일 5시간 20분 초가 라고 표시되고 (주말은 포함 안됨)

      월요일날  쿼리를 2020-01-06 16:40:40 초에 쿼리를 조회하면   결과가 5일 5시간 20분 초가 라고 표시되는 쿼리좀 부탁드립니다. 

       

     정리하면 조회 시점에 날짜 기준으로 초가니 날짜를 구하는건데 주말을 제외하고 표시되는게 포인트 입니다. 

     고수분들 조언좀 부탁 드립니다. 

     감사합니다.

     

      

      

 

 

by 마농 [2020.01.02 16:11:38]
WITH t AS
(
SELECT 1 pk, TO_DATE('2019-12-30 11:20:50', 'yyyy-mm-dd hh24:mi:ss') dt FROM dual
UNION ALL SELECT 2, TO_DATE('2019-12-29 11:20:50', 'yyyy-mm-dd hh24:mi:ss') FROM dual
UNION ALL SELECT 3, TO_DATE('2019-12-28 11:20:50', 'yyyy-mm-dd hh24:mi:ss') FROM dual
UNION ALL SELECT 4, TO_DATE('2019-12-27 11:20:50', 'yyyy-mm-dd hh24:mi:ss') FROM dual
UNION ALL SELECT 5, TO_DATE('2019-12-26 11:20:50', 'yyyy-mm-dd hh24:mi:ss') FROM dual
)
SELECT pk, dt
     , FLOOR(x) dd
     , TO_CHAR(TO_DATE(ROUND(MOD(x, 1)*24*60*60), 'sssss'), 'hh24:mi:ss') tm
  FROM (SELECT pk, dt
             , SUM( LEAST(sysdate, TRUNC(dt) + lv) - GREATEST(dt, TRUNC(dt) + lv - 1)) x
          FROM t a
             , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 99) b
         WHERE lv <= TRUNC(sysdate) - TRUNC(dt) + 1
           AND TO_CHAR(TRUNC(dt) + lv - 1, 'd') NOT IN ('1', '7')
         GROUP BY pk, dt
        )
 ORDER BY pk
;

 

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