날짜 사이의 주차 구하기.. 1 14 1,606

by 개꿈 [SQL Query] [2015.03.10 16:56:18]


예를 들어서 20140101 ~ 20140505 사이의 일요일 기준으로 주차를 구하고 싶습니다..

부탁드립니다...

 

by jkson [2015.03.10 17:18:43]

일요일의 기준 뭐죠? 일요일부터 주가 시작한다는 건가요?


by 개꿈 [2015.03.10 17:20:34]

20140101 ~ 20140505 사이의 일요일이 몇번인가를 구하려고 합니다..


by jkson [2015.03.10 17:21:22]

일요일부터 주의 시작으로 본다면

SELECT TO_CHAR(TO_DATE('2015-03-10','YYYY-MM-DD') + 1,'IW') FROM DUAL


by 개꿈 [2015.03.10 17:24:45]

xxxx/xx/xx ~ xxxx/xx/xx  사이의 일요일이 몇번인지 구하는거예요.


by jkson [2015.03.10 17:22:49]

아 일요일을 카운트 하시는 거군요. 그러면 좀 다르게 생각해봐야겠네요.


by rain748 [2015.03.10 17:24:55]

select count(dt)
from (
select to_char((to_date('20140101','yyyymmdd') + level) - 1, 'd') dt
from dual
connect by level <= (to_date('20140505','yyyymmdd') - to_Date('20140101','yyyymmdd'))+1)
where dt = 1


by 개꿈 [2015.03.10 17:33:32]

감사합니다.


by jkson [2015.03.10 17:27:00]

SELECT TO_NUMBER(TO_CHAR(TO_DATE('2015-03-10','YYYY-MM-DD') + 1,'IW')) - 1 -- 기본 일요일수자 카운트 후
     + DECODE(TO_CHAR(TO_DATE('2015-01-01','YYYY-MM-DD'),'DAY'),'일요일',1,0) CNT -- 1월 1일이 일요일인 경우 + 1일 해준다
 FROM DUAL


by jkson [2015.03.10 17:30:18]

으헝 댓글 달때마다 새로운 게 보이네요.. 기준일자가 주어지면 연초부터 카운트하는 게 아니라.. 기준일자가 2개 주어지고 그 사이에 일요일 개수를 카운트하는 거군요.;


by jkson [2015.03.10 17:36:18]

음.. 질문을 처음부터 자세히 올려주셨으면 좋았을텐데.. 댓글 달릴 때마다 조건이 추가되니 좀 허망하네요; 보통 주차라고하면 연초 혹은 월초부터 계산하는 개념인데.. 주차라고 하셔서.. 음 ㅠ


by 개꿈 [2015.03.10 17:38:58]

윽.. 죄송합니다.. ㅜㅜ
 


by 아발란체 [2015.03.10 17:36:38]

내용을 계속 바꾸시면 댓글 주시는 분들이 힘들답니다 ~ :)

WITH T1 AS (
  SELECT
    '2014-01-01' AS sd,
    '2014-05-05' AS ed
  FROM
    DUAL
), T2 AS (
  SELECT
    TO_DATE(sd) + LEVEL - 1 AS td
  FROM
    T1
  CONNECT BY
    TO_DATE(sd) + LEVEL - 1 <= TO_DATE(ed)
)
SELECT td AS 날짜, TO_CHAR(td, 'YYYY-MM')||' '||wk||'주차' AS 주차 FROM (
  SELECT
    td,
    RANK() OVER(PARTITION BY TO_CHAR(td, 'YYYY-MM') ORDER BY td) AS wk, ROW_NUMBER() OVER(ORDER BY ROWNUM DESC) AS lt
  FROM 
    T2
  WHERE
    1 = TO_CHAR(td, 'd')
)
WHERE
  lt <= 4
ORDER BY
  날짜

 


by 백면서생 [2015.03.10 20:51:07]

with t as
(
 select '20150301' bdate, '20150308' edate from dual union all
 select '20140101' bdate, '20140505' edate from dual 
)
select ceil((to_date(edate,'yyyymmdd')-next_day(to_date(bdate,'yyyymmdd')-1,'일요일')+1)/7) cnt
from t

 


by 개꿈 [2015.03.11 10:07:50]

백면서생님 답변이 제일 간단하고 좋네요 감사합니다

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