2024년의 주시작일자 , 주종료일자, 음력일자를 조회하고싶습니다 0 3 3,194

by 브레드78 [SQL Query] 오라클 [2023.11.29 11:31:43]


캡처.PNG (46,183Bytes)

오라클 날짜 함수를 이용해서 2024년의 365일 로우를 만들고

나머지는 다 쿼리를 만들었는데

월요일 기준 -> 주시작일 

일요일 기준 -> 주종료일

쿼리와 음력일자 쿼리를  추출해내지 못하고 있는데 도움 주실수있나요?

 

by 마농 [2023.11.29 13:06:55]

월요일 기준 주시작일 -> TRUNC(dt, 'iw')
월요일 기준 주종료일 -> TRUNC(dt, 'iw') + 6
양력, 음력 전환 -> 달력 테이블 미리 만들어 두고 조인하여 사용하세요.


by 브레드78 [2023.11.29 13:38:16]

SELECT
  start_date AS 주시작일자,
  end_date AS 주종료일자
FROM (
  SELECT
    TRUNC(TO_DATE('2024-01-01', 'YYYY-MM-DD') + (LEVEL - 1) * 7, 'D') AS start_date,
    TRUNC(TO_DATE('2024-01-01', 'YYYY-MM-DD') + (LEVEL - 1) * 7 + 6, 'D') AS end_date
  FROM DUAL
  CONNECT BY TO_DATE('2024-01-01', 'YYYY-MM-DD') + (LEVEL - 1) * 7 <= TO_DATE('2024-12-31', 'YYYY-MM-DD')
)
WHERE TO_CHAR(start_date, 'D') = 1 -- 주의 시작일을 월요일(1)로 지정
ORDER BY start_date;

이쿼리는 일요일이 주시작일으로 되어있는데 월요일을 주 시작일로 수정하고 싶은데 어떻게 해야할까요?ㅠㅠ


by 마농 [2023.11.29 14:52:10]
-- 1. 일요일 기준(D) 주차 --
SELECT sdt + LEVEL * 7 - 7 sdt
     , sdt + LEVEL * 7 - 1 edt
  FROM (SELECT TRUNC(TO_DATE('2024-01-01', 'yyyy-mm-dd'), 'd') sdt
             , TRUNC(TO_DATE('2024-12-31', 'yyyy-mm-dd'), 'd') edt
          FROM dual
        )
 CONNECT BY LEVEL <= (edt - sdt) / 7 + 1
;

-- 2. 월요일 기준(IW) 주차 --
SELECT sdt + LEVEL * 7 - 7 sdt
     , sdt + LEVEL * 7 - 1 edt
  FROM (SELECT TRUNC(TO_DATE('2024-01-01', 'yyyy-mm-dd'), 'iw') sdt
             , TRUNC(TO_DATE('2024-12-31', 'yyyy-mm-dd'), 'iw') edt
          FROM dual
        )
 CONNECT BY LEVEL <= (edt - sdt) / 7 + 1
;

 

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