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

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;




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


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

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

반응형

댓글0