만년 달력 소스 코드
SELECT
NVL(MIN( DECODE(TO_CHAR(dates,'D'),1, TO_CHAR(dates,'DD') ) ),' ') 일
,NVL(MIN(DECODE(TO_CHAR(dates,'D'),2, TO_CHAR(dates,'DD') ) ),' ') 월
,NVL(MIN(DECODE(TO_CHAR(dates,'D'),3, TO_CHAR(dates,'DD') ) ),' ') 화
,NVL(MIN(DECODE(TO_CHAR(dates,'D'),4, TO_CHAR(dates,'DD') ) ),' ') 수
,NVL(MIN(DECODE(TO_CHAR(dates,'D'),5, TO_CHAR(dates,'DD') ) ),' ') 목
,NVL(MIN(DECODE(TO_CHAR(dates,'D'),6, TO_CHAR(dates,'DD') ) ),' ') 금
,NVL(MIN(DECODE(TO_CHAR(dates,'D'),7, TO_CHAR(dates,'DD') ) ),' ') 토
FROM(
SELECT TO_DATE(:yyyymm,'YYYYMM') + (LEVEL -1) dates
FROM dual
CONNECT BY LEVEL <= EXTRACT(DAY FROM LAST_DAY(TO_DATE( :yyyymm ,'YYYYMM')))
) t
GROUP BY DECODE( TO_CHAR( dates, 'D'),1, TO_CHAR( dates, 'IW')+1, TO_CHAR( dates, 'IW') )
ORDER BY DECODE( TO_CHAR( dates,'D') ,1, TO_CHAR( dates, 'IW')+1, TO_CHAR( dates, 'IW') );
:yyyymm를 통해 연도 4자리 월2자리를 입력 받아 달력을 출력한다.
SELECT 절에서 DECODE()를 이용하여 각 요일에 해달되면 날짜를 출력하고 거짓이면 공백을 출력한다.
nvl(), min(), decode(), to_char(), group by, order by, level 을 이해하면 만년 달력을 만들 수 있다.
출력 결과
202112 입력하여 입력 값에 따라 달력이 출력되었다.
반응형
'Backend > DB' 카테고리의 다른 글
[ORACLE] 오라클 포트 번호 확인 및 변경 쿼리문 (0) | 2022.01.28 |
---|---|
[DB 이론] 데이터 모델링(Data Modeling)이란? (0) | 2021.12.26 |
[ORACLE] 오라클 SQL 종류 (DDL,DML,DCL) (0) | 2021.11.02 |
[DB모델링툴] eXERD 무료 평가판 다운로드 (0) | 2021.11.02 |
[ORACLE] 오라클 SQL 시노님(synonym) (0) | 2021.11.02 |