데이터베이스를 사용하다 보면 연속으로 된 날짜가 필요한 경우가 있습니다.
(월 단위, 주 단위 날짜 등)
오라클 DB에서 제공하는 CONNECT BY LEVEL 쿼리를 사용해 연속으로 된 날짜를 만들어 보겠습니다.
아래 내용을 보시면 알겠지만 CONNECT BY LEVEL 쿼리는 반복문처럼 활용할 수 있습니다.
아래 사진과 같이 매주 금요일, 매월 1일 등을 생성할 수 있습니다.
-- CONNECT BY LEVEL 사칙연산 예제
SELECT LEVEL, LEVEL*2, LEVEL*100, LEVEL*LEVEL FROM DUAL
CONNECT BY LEVEL <= 10;
-- 2021-01-01 7일 이후 데이터를 출력하는 쿼리
SELECT (TO_DATE('20210101', 'YYYYMMDD') + (LEVEL*7)) AS PRINT_FRIDAY FROM DUAL
CONNECT BY LEVEL <= 12;
-- !TIP : 날짜가 21/01/08 형태로 나오는 이유
-- 오라클의 NLS_DATE_FORMAT이 RR/MM/DD 로 되어 있기 때문 입니다.
-- TO_CHAR로 변경하지 않은 기본 DATE는 NLS_DATE_FORMAT을 따릅니다.
SELECT SYSDATE FROM DUAL;
SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT';
-- ADD_MONTHS(날짜, 숫자)를 이용해 숫자만큼 MONTH를 더합니다.
-- 마지막에는 TO_CHAR로 데이터포맷을 'YYYY-MM-DD'로 변경합니다.
SELECT TO_CHAR(ADD_MONTHS(TO_DATE('202101', 'YYYYMM'), LEVEL - 1), 'YYYY-MM-DD') AS MONTH_LIST FROM DUAL
CONNECT BY LEVEL <= 12;
아래에 예제 쿼리 파일도 첨부드립니다.
기타 궁금하신 사항은 편하게 댓글 남겨주세요.
감사합니다.
[Oracle DB] 오라클 DB 백그라운드 프로세스별 역할 (0) | 2021.04.18 |
---|---|
[DB 정규화] 1정규형, 2정규형, 3정규형 (0) | 2021.04.17 |
[Oracle] 오라클 VARCHAR2 타입 Byte semantics과 Character Semantics (0) | 2021.03.09 |
[MySQL] 날짜 형식이 섞여있는 데이터 처리 하기 (0) | 2021.02.14 |
[Virtualbox] 버추얼박스에 설치한 MySQL 접속하기 (3) | 2021.02.12 |