본문 바로가기
데이터분석/SQL

4. 날짜 관련 함수 ① (MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAY)

by tout l'été 2023. 11. 23.

 

안녕하세요.

날짜 관련 함수는 업무 중에도 유용하게 자주 쓰일 것 같아 기록하려고 합니다. 

 

 

< INDEX >

1. 날짜 간 개월 수 출력 (MONTHS_BETWEEN)

2. 개월 수 더한 날짜 출력  (ADD_MONTHS)

3. 특정 날짜 뒤에 오는 요일 날짜 출력 (NEXT_DAY)

4. 특정 날짜가 있는 달의 마지막 날짜 출력 (LAST_DAY)

5. 문자형으로 데이터 유형 변환 (TO_CHAR)

6. 날짜형으로 데이터 유형 변환하기 (TO_DATE)

 

 

 


 

1. 날짜 간 개월 수 출력 (MONTHS_BETWEEN)

1.1 MONTHS_BETWEEN(최신 날짜, 예전 날짜)
이름을 출력하고 입사한 날짜부터 오늘까지 총 몇 달을 근무했는지 출력 

 

SELECT ename, MONTHS_BETWEEN(sysdate, hiredate)
    FROM emp;

 

출력 결과 

 

 

1.2  2018년 10월 1일에서 2019년 6월 1일 사이의 총 일수 출력 

SELECT TO_DATE('2019-06-01', 'RRRR-MM-DD') - TO_DATE('2018-10-01', 'RRRR-MM-DD')
    FROM DUAL;

 

출력 결과 

 

 

 

1.3 2018년 10월 1일에서 2019년 6월 1일 사이의 총 주(week)수 출력 

SELECT ROUND((TO_DATE('2019-06-01', 'RRRR-MM-DD') - TO_DATE('2018-10-01', 'RRRR-MM-DD')) / 7) AS "총 주수"
    FROM DUAL;

 

출력 결과 

 

 


 

 

2. 개월 수 더한 날짜 출력  (ADD_MONTHS)

2.1  2019년 5월 1일로부터 100달 뒤의 날짜 구하기 ① ADD_MONTHS

SELECT ADD_MONTHS(TO_DATE('2019-05-01', 'RRRR-MM-DD'), 100)
    FROM DUAL;

 

출력 결과 

 

 

 

2.2 2019년 5월 1일로부터 100일 뒤의 날짜 구하기

SELECT TO_DATE('2019-05-01', 'RRRR-MM-DD') + 100
    FROM DUAL;

 

출력 결과 

 

 

 

2.3 2019년 5월 1일로부터 100달 뒤의 날짜 구하기 ② INTERVAL 함수

INTERVAL 함수는 좀더 섬세하게 날짜 산술 연산 구현 가능

SELECT TO_DATE('2019-05-01', 'RRRR-MM-DD') + INTERVAL '100' MONTH
    FROM DUAL;

 

출력 결과 

 

 

2.4 2019년 5월 1일부터 1년 3개월 후의 날짜 출력 

SELECT TO_DATE('2019-05-01', 'RRRR-MM-DD') + INTERVAL'1-3' YEAR(1) TO MONTH
    FROM DUAL;

 

출력 결과 

 

 

2.5 2019년 5월 1일부터 3년 후의 날짜 출력 

SELECT TO_DATE('2019-05-01', 'RRRR-MM-DD') + INTERVAL '3' YEAR
    FROM DUAL;

 

출력 결과 

 

 

2.6 2019년 5월 1일부터 3년 5개월 후의 날짜 출력

SELECT TO_DATE('2019-05-01', 'RRRR-MM-DD') + TO_YMINTERVAL('03-05') AS 날짜
    FROM DUAL;

 

출력 결과

 


 

3. 특정 날짜 뒤에 오는 요일 날짜 출력 (NEXT_DAY)

3.1 2019년 5월 22일로부터 바로 돌아올 월요일의 날짜 출력

SELECT '2019/05/22' AS 날짜, NEXT_DAY('2019/05/22', '월요일')
    FROM DUAL;

 

출력 결과 

 

 

3.2 오늘 날짜 출력 

SELECT SYSDATE as "오늘 날짜"
    FROM DUAL;

 

출력 결과 

 

 

3.3 오늘부터 앞으로 돌아올 화요일의 날짜 출력 

SELECT NEXT_DAY(SYSDATE, '화요일') AS "다음 날짜"
    FROM DUAL;

 

출력 결과 

 

 

3.4 2019년 5월 22일부터 100달 뒤에 돌아오는 화요일의 날짜 출력 

SELECT NEXT_DAY(ADD_MONTHS('2019/05/22', 100), '화요일') AS "다음 날짜"
    FROM DUAL;

 

출력 결과 

 

 

 

3.5 오늘부터 100달 뒤에 돌아오는 월요일의 날짜 출력 

SELECT NEXT_DAY(ADD_MONTHS(SYSDATE, 100), '월요일') AS "다음 날짜"
    FROM DUAL;

 

출력 결과 

 

 


 

 

4. 특정 날짜가 있는 달의 마지막 날짜 출력 (LAST_DAY)

4.1 2019년 5월 22일 해당 달의 마지막 날짜 출력 

SELECT '2019/05/22' AS "날짜", LAST_DAY('2019/05/22') AS "마지막 날짜"
    FROM DUAL;

 

 

출력 결과 

 

 

4.2 오늘부터 이번달 말일까지 총 며칠 남았는지 출력 

SELECT LAST_DAY(SYSDATE) - SYSDATE AS "남은 날짜"
    FROM DUAL;

 

 

출력 결과 

 

 

4.3  이름이 KING인 사원의 이름, 입사일, 입사한 달의 마지막 날짜 출력

SELECT ename, hiredate, LAST_DAY(hiredate)
    FROM emp
    WHERE ename = 'KING';

 

 

출력 결과 

 

 

 

 

감사합니다. 

다음 장에서는 날짜 함수 TO_CHAR, TO_DATE를 이어서 기록하도록 하겠습니다. ㅎㅎ