본문 바로가기

닷컴's_열공/Database

[Oracle]날짜관련 연산 SQL

/* 특정일 까지의 간격을 년, 개월, 일로 표현하기 */
SELECT TRUNC((MONTHS_BETWEEN(SYSDATE, TO_DATE('19780124', 'YYYYMMDD')) / 12)) "년",
       TRUNC((MONTHS_BETWEEN(SYSDATE, TO_DATE('19780124', 'YYYYMMDD')) - TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19780124', 'YYYYMMDD')) / 12) * 12)) "개월",
       TRUNC((MONTHS_BETWEEN(SYSDATE, TO_DATE('19780124', 'YYYYMMDD')) - TRUNC(MONTHS_BETWEEN(SYSDATE, TO_DATE('19780124', 'YYYYMMDD')))) * 30.5) "일"
  FROM DUAL
;


/* '금일' - '생일' / 개월 -> 태어난지 몇 개월이 흘렀는가? */
SELECT MONTHS_BETWEEN(SYSDATE,TO_DATE('1978-01-24','YYYY-MM-DD')) FROM DUAL;

/* 금일로부터 4개월 후 */
SELECT ADD_MONTHS(SYSDATE,4) FROM DUAL;

/* 금일 이후 최초의 목요일 (NLS_LANG이 KOREAN_KOREA.KO16KSC5601로 되어 있으면 한글로 요일 표현) */
SELECT NEXT_DAY(SYSDATE, '목요일') FROM DUAL;

/* 이달의 마지막 날짜 */
SELECT LAST_DAY(SYSDATE) FROM DUAL;

/* '금일' 반올림(오후면 다음날..) */
SELECT ROUND(SYSDATE,'DD') FROM DUAL;

/* '금일' 주 첫일 찾기 */
SELECT TRUNC(SYSDATE,'WW') FROM DUAL;  


-- 날짜계산
/* 어제 */ DateColumn BETWEEN TRUNC(SYSDATE-1)                                            AND TRUNC(SYSDATE-1) + 0.99999421;
/* 오늘 */ DateColumn BETWEEN TRUNC(SYSDATE)                                              AND TRUNC(SYSDATE)   + 0.99999421;
/* 내일 */ DateColumn BETWEEN TRUNC(SYSDATE+1)                                            AND TRUNC(SYSDATE+1) + 0.99999421;
/* 금주 */ DateColumn BETWEEN TRUNC(SYSDATE+1) - TO_CHAR(SYSDATE,'D')                     AND TRUNC(SYSDATE+1) - TO_CHAR(SYSDATE,'D') + 6.99999421;
/* 차주 */ DateColumn BETWEEN TRUNC(SYSDATE+8) - TO_CHAR(SYSDATE,'D')                     AND TRUNC(TRUNC(SYSDATE) + 14.99999421) - TO_CHAR(SYSDATE,'D');
/* 금월 */ DateColumn BETWEEN TRUNC(SYSDATE+1) - TO_CHAR(SYSDATE,'DD')                    AND TRUNC(LAST_DAY(SYSDATE))+0.99999421;
/* 전월 */ DateColumn BETWEEN TRUNC(ADD_MONTHS(SYSDATE,-1)+1) - TO_CHAR(SYSDATE,'DD')     AND TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE, -1)))+0.99999421;
/* 차월 */ DateColumn BETWEEN ADD_MONTHS(TRUNC(SYSDATE),1)    - TO_CHAR(SYSDATE,'DD') + 1 AND LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE),1)+0.99999421);