Q&A

  • 토/일요일 구할때 추가요???
쿼리로 이번 달의 토/일요일의 수를 구했습니다.

select CEIL ((ADD_MONTHS (YYYYMM, 1) - NEXT_DAY (YYYYMM - 1, 7)) / 7)                                                            
     + CEIL ((ADD_MONTHS (YYYYMM, 1) - NEXT_DAY (YYYYMM - 1, 1)) / 7) DT                                                        
  from (select TRUNC (TO_DATE ('200901', 'YYYYMM')) YYYYMM                                                                
          from DUAL t
         )

근데 여기에서 2009년01월의 특정 기간인 2009-01-05 부터 2009-01-20까지의
토/일요일을 구할려면 어떻게 해야 하나요????

2  COMMENTS
  • Profile
    공성환 2009.02.19 05:29
    쿼리 만들어본지 오래되어서 인터넷 여기저기서 오라클 함수 찾아서 대충 비스므리하게 만들었는데...
    이런식으로 구하면 어떨까요....

    SELECT COUNT(*)
    FROM (SELECT base_yyyymm + LEVEL - 1 days1,
    TO_CHAR(base_yyyymm + LEVEL - 1,'DY') days2
    FROM (SELECT TO_DATE ('200901', 'yyyymm') base_yyyymm
    FROM DUAL)
    CONNECT BY base_yyyymm + LEVEL - 1 <= LAST_DAY (base_yyyymm)) a
    WHERE a.days1 BETWEEN '20090105' AND '20090120'
    AND a.days2 IN ('토','일')
  • Profile
    프리러너 2009.02.19 08:31
    *^^*

    조금 전에 델마당에 있다가 델로 왔는데.
    같은 질문이 있네요 ㅎㅎ

    델마당에 올려 놓은 답변입니다..
    도움이 되었을지~~~ ^^

    select
    vw.dday
    from
    (
    select
    ct.no1
    , to_date( '20090105','yyyymmdd')-1 + ct.no1 as dday
    from
    (
    select to_date( '20090120','yyyymmdd') - to_date( '20090105','yyyymmdd') + 1 as dd
    from dual
    ) vw
    , copy_t ct
    where vw.dd >= ct.no1
    ) vw
    where to_char( dday ,'d' ) in (1,7)
    ;


    주 키포인트는 copy_t 테이블로 구현 했습니다..

    오라클 함수중에 'd' 라는 값으로 요일 판단 했습니다.
    to_char( 일자 ,'d' ) -> 일요일 : 1
    월요일 : 2
    .....
    토요일 : 7

    오늘도 조운 하루 되세요... ^^