기술

[오라클/티베로]DUAL 테이블과 CONNECT BY LEVEL를 활용한 달력구하기

또리줌마 2024. 2. 27. 17:11
반응형

 

DUAL 테이블과 CONNECT BY LEVEL 을 이용한 달력(월별일자) 을 구하는 쿼리 입니다.
보통 컬린더 테이블을 만들어 놓으나 사용하나, 없는 경우 유용하게 사용가능합니다.

 

 


SELECT SUBSTR(YYYYMMDD,1,6) AS YYYYMM
          , YYYYMMDD
          ,TO_CHAR(TO_DATE(YYYYMMDD, 'YYYYMMDD'), 'DY') DY
 FROM 
(
    SELECT TO_CHAR(SYSDATE,'YYYYMM')  ||  LPAD(LEVEL, 2, '0') AS YYYYMMDD 
    FROM DUAL CONNECT BY LEVEL < 32

WHERE YYYYMMDD <= TO_CHAR(LAST_DAY(SYSDATE),'YYYYMMDD')   

 

 


SELECT MM.YYYYMM  년월  /* 년월 */
          , MM.YYYYMM || DD.DD  AS 일자   /* 일자 */
          , TO_CHAR(TO_DATE(MM.YYYYMM || DD.DD,'YYYYMMDD'),'MON')    AS 월  /* 요일_한글(일~토) */                    
          , TO_CHAR(TO_DATE(MM.YYYYMM || DD.DD,'YYYYMMDD'),'D')      AS 요일숫자     /* 요일_숫자반환 : 1일(일)~7(토)  */
          , TO_CHAR(TO_DATE(MM.YYYYMM || DD.DD,'YYYYMMDD'),'DY')    AS 한글요일  /* 요일_한글(일~토) */          
          , TO_CHAR(TO_DATE(MM.YYYYMM || DD.DD,'YYYYMMDD'),'DAY')  AS 한글요일2 /* 요일_한글 (일요일~토요일) */           
          , TO_CHAR(TO_DATE(MM.YYYYMM || DD.DD,'YYYYMMDD'),'DDD')  AS 일수 /* 연간일수 (365일 또는 366일 기준)   */
          , TO_CHAR(TO_DATE(MM.YYYYMM || DD.DD,'YYYYMMDD'),'WW')   AS 주차  /* 연간주차 */
          , TO_CHAR(TO_DATE(MM.YYYYMM || DD.DD,'YYYYMMDD'),'Q')      AS 분기     /* 분기 (1~4분기) */                                       
FROM 
(SELECT YYYYMM  /*년월 */
            , TO_CHAR(LAST_DAY( TO_DATE(YYYYMM||'01')),'YYYYMMDD') LAST_DY   /*월별마지막일자*/
 FROM 
    ( SELECT  TO_CHAR(SYSDATE,'YYYY')  || LPAD(LEVEL, 2, '0') AS YYYYMM
        FROM DUAL CONNECT BY LEVEL < 13
    )         
) MM, 
(  SELECT LPAD(LEVEL, 2, '0') AS DD  
    FROM DUAL CONNECT BY LEVEL < 32
 ) DD
 WHERE  MM.YYYYMM || DD.DD <= MM.LAST_DY  

 

 

   : 날짜 포맷

Format 설명
YYYY 4자리 연도
YY 두자리 연도
D Day of week (1-7)
DAY 요일(월,화..)
DD Day of month (1-31)
DDD Day of year (1-366)
MM 해당월을 01~12로 표시
MONTH Name of month
WW Week of year (1-53)
IW Week of year (1-53) 국제 표준
W Week of month (1-5)
HH24 Hour of day (0-23)
HH Hour of day (1-12)
MI Minute (0-59)
SS Second (0-59)

 - "WW"와 "IW" 모두 1년의 몇 주차(1~53)로 조회하는 포맷 이다.

 - "WW" :  1일에서 7일까지가 1주차로 시작

 - "IW" : 실제 달력에 맞게 주차가 계산