개발 환경
OS : Windows 8 64 Bit
Platform : Web (http://sqlfiddle.com)
Project :
DBMS : ORACLE
My mental state : not good
The reliability of this article : High
오라클 날짜 관련 정리하다가 월별 차주에 대해서 새로 알게 된게 있어서 포스팅!
일단 여기 참조!
전에 포스팅한 글에서는 달력의 월별 차주가 7일간격으로 1주, 2주, 3주... 이렇게 계산됩니다.
뭐 물론 이것도 좋지만 보통 월욜부터 일욜을 한주로 보니깐 오라클 7일 기준은 조금 애매한 부분이 있음을 인정할 수 밖에 없죠!!!
그래서 또 공부!
이것저것 찾아보니 이런 방법이 있었습니다.
아래에 SQL, 빨간색 부분
SELECT DEEP_1.*,
CASE
WHEN C_DAY_NUM = 1 THEN 'SUN'
WHEN C_DAY_NUM = 2 THEN 'MON'
WHEN C_DAY_NUM = 3 THEN 'TUE'
WHEN C_DAY_NUM = 4 THEN 'WED'
WHEN C_DAY_NUM = 5 THEN 'THU'
WHEN C_DAY_NUM = 6 THEN 'FRI'
WHEN C_DAY_NUM = 7 THEN 'SAT'
ELSE
'WHAR?'
END C_NAME,
CEIL (
(TO_DATE(C_DATE, 'YYYYMMDD') -
TRUNC(TRUNC(TO_DATE(DEEP_1.C_DATE, 'YYYYMMDD'), 'MM'), 'IW') + 1)
/ 7) C_WEEK_ISO
FROM ( SELECT TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'YYYYMMDD') AS C_DATE,
TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'YYYY-MM-DD') AS C_P_DATE,
TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'YYYY') AS C_YEAR,
TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'MM') AS C_MON,
TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'DD') AS C_DAY,
TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'D') AS C_DAY_NUM,
TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'WW') AS C_WEEK_NUM,
TO_CHAR(TO_DATE('20180101', 'YYYYMMDD') + LEVEL - 1, 'W') AS C_WEEK_NUM_OF_MON
FROM DUAL
CONNECT BY LEVEL <= (TO_DATE('20181231', 'YYYYMMDD') -
TO_DATE('20180101', 'YYYYMMDD') +1)) DEEP_1;
이런 식으로 구현이 되더라구요 ;)
TRUNC 함수에 대해서 한번 더 알게 된 기회였습니다.
TRUNC 과 궁금하시다면!!!
그들은 김치를 먹나요 ?
Do they eat kimchi ?
댓글 없음:
댓글 쓰기