달력 주차 관련 질문이 있습니다. 0 6 983

by zumsim [SQL Query] [2020.05.11 13:53:01]


SELECT TRUNC(TO_DATE('202101', 'YYYYMM'),'MM'), TO_CHAR(TRUNC(TO_DATE('202101', 'YYYYMM'),'MM'),'IW')
FROM DUAL

 

이렇게 하면

21/01/01 날짜가 나오는데 주차는 53으로 찍히는데

이걸 혹시 1주차로 찍히게 하려면 어떻게 해야할까요..?

그리고 혹시 해당 달이 몇주짜리 달인지 구하는 방법에 대해 팁을 주시면 제가 해보겠습니다.ㅠ

제가 생각한거는 마지막 날짜 주차 - 첫날짜 주차를 빼면 될거 같았는데

위의 질문처럼 53주로 나와버리니까 21년도는 제대로 출력이 안되더라구요..

by 마농 [2020.05.11 15:41:38]

1. 위에 IW 의 기준은 (월화수목금토일) 기준으로
 - 1월1일이 속한 주의 1월 일자가 반 이상을 차지할 때 1주차가 됩니다.
  - 전년도 12월의 일자가 반이상을 차지하게 되면 53주차 또는 52주차 가 되겠네요.
2. 우선 뽑고자 하는 주차에 대한 정확한 정의를 해야 합니다.
  - 일주일의 시작은? (월요일 vs 일요일 vs 1월1일)
3. 년도가 겹치는 주차의 처리 기준은?
  - 더 많이 차지하고 있는 년도의 주차로 처리?
  - 일주일의 년도별 분포와 상관 없이 1월1일은 무조건 1주차가 되어야 한다?
  - 일주일을 다시 쪼개어 12월은 53주차가 되고, 1월은 1주차가 되어야 한다?


by zumsim [2020.05.18 16:26:32]

우선 일주일의 시작은 월요일로 보고 있구요

1월1일은 무조건 1주차로 되야할 것 같습니다. 

그래야 그 달이 총 몇주인지 구하기 쉬울거 같아서요


by 마농 [2020.05.18 16:47:32]

목적이 뭔가요?
- 월의 시작 주차를 구하는 것인가요?
- 아니면, 월의 주의 개수를 구하는 건가요?
최종 목적 달성을 위해 생각하신 중간 결과가 꼭 필요한게 아닐 수도 있습니다.
목적을 명확하게 해주시고, 원본 대비 결과 예를 정확하게 들어 주세요.


by zumsim [2020.05.18 16:49:31]

목적은 월의 주의 개수를 구하는 것이에요

이전 개발자가 jsp에서 달력 그릴때 foreach에 end값을 4로 박아두는 바람에

필요없는 줄이 생기기도하고 보여야하는 줄이 안보이기도 해서 월의 주의 개수를 가져와서 for문을 돌리려구요


by 마농 [2020.05.18 16:54:38]

( (말일이 포함된 주의 월요일) - (1일이 포함된 주의 월요일) ) / 7 + 1 AS 주의개수

SELECT ym
     , (TRUNC(LAST_DAY(ym), 'iw') - TRUNC(ym, 'iw')) / 7 + 1 w_cnt
  FROM (SELECT TO_DATE('202005', 'yyyymm') ym FROM dual)
;

 


by zumsim [2020.05.19 10:13:26]

세상에..너무나 감사드립니다..ㅜㅜ

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