본문 바로가기
프로그래밍/데이터베이스

Oracle 원하는 기간의 날짜 데이터 만들기

by pentode 2018. 7. 14.

일자별로 일정을 저장하는 테이블을 가정해봅시다. 일정이 있는 날의 데이터만 저장되어 있습니다.


이제 이 데이터를 달력이나 일주일씩 화면에 표시하는 방법을 생각해 보겠습니다.


두 가지 방법이 있을 수 있겠습니다.


첫 번째는 데이터베이스에서 원하는 월 또는 주 기간의 데이터를 조회합니다. 프로그램으로 기간 동안의 날짜 데이터 리스트를 만듭니다. 리스트를 루핑하면서 그 날짜에 데이터베이스에서 조회한 데이터가 있는지 다시 루핑하면 체크하여 데이터가 있으면 출력합니다.


두 번째는 데이터베이스에서 데이터를 만들때 원하는 기간의 날짜를 모두 만든 다음에 일정 테이블에 조인하여 결과를 만드는 것입니다. 일정이 있는날과 일정이 없는날 모두 데이터가 만들어지고 프로그램에서는 루핑하면서 출력하면 됩니다.


두 번째 방법을 사용하기 위해서 오라클에서 날짜 데이터를 생성하는 방법을 알아보겠습니다.



1. 다른 데이터가 있는 테이블과 ROWNUM을 사용하는 방법


- 원하는 날짜 범위만큼의 충분한 데이터가 있는 테이블을 사용합니다.


SELECT TO_CHAR(TO_DATE('2018-07-01', 'YYYY-MM-DD') + ROWNUM - 1, 'YYYY-MM-DD') AS "DATE"

     , TO_CHAR(TO_DATE('2018-07-01', 'YYYY-MM-DD') + ROWNUM - 1, 'DAY') AS DAYOFWEEK

     , TO_CHAR(TO_DATE('2018-07-01', 'YYYY-MM-DD') + ROWNUM - 1, 'DY') AS SDOW

     , TO_CHAR(TO_DATE('2018-07-01', 'YYYY-MM-DD') + ROWNUM - 1, 'D') AS NDOW

   FROM ALL_OBJECTS

  WHERE ROWNUM <= 7;




2. CONNECT BY 구문을 사용하는 방법입니다.


  SELECT TO_CHAR(TO_DATE('2018-07-01','YYYY-MM-DD') + LEVEL, 'YYYY-MM-DD') AS "DATE"

       , TO_CHAR(TO_DATE('2018-07-01','YYYY-MM-DD') + LEVEL, 'DAY') AS DAYOFWEEK

       , TO_CHAR(TO_DATE('2018-07-01','YYYY-MM-DD') + LEVEL, 'DY') AS SDOW

       , TO_CHAR(TO_DATE('2018-07-01','YYYY-MM-DD') + LEVEL, 'D') AS NDOW

   FROM DUAL

CONNECT BY LEVEL <= 7;




이제 위에서 만들어진 쿼리를 서브쿼리로하여 원하는 테이블과 조인해서 원하는 데이터를 만들면되겠습니다.


일자별 데이터를 데이터가 존재하는 날짜와 빈날짜를 모두 가지는 데이터로 조회 하기 위해서 원하는 기간의

날짜 데이터를 생성하는 방법을 알아보았습니다.

반응형