본문 바로가기

Oracle/SQL

SQL 단일행 함수 - 날짜함수

날짜함수

  1. months_between : 날짜와 날짜 사이의 개월수를 출력
  2. add_months : 날짜에서 개월수를 더한 날짜를 출력
  3. last_day : 특정 날짜의 달의 마지막 날짜를 출력
  4. next_day : 해당날짜의 달에서 앞으로 돌아올 특정 요일의 날짜를 출력
  • 오늘 날짜 출력 하기 (sysdate)

select sysdate

from dual;

예제 : 내일 날짜

select sysdate + 1

from dual;

날짜 - 날짜 = 숫자 (날짜에서 날짜빼면 그사이의 며칠인지를 뽑는것이기 때문에 날짜가 뽑히는게 아닌 숫자가 뽑힌다.)

날짜 + 숫자 = 날짜

날짜 - 숫자 = 날짜


(months_between) (날짜 사이의 달 구하기)

예시 : 오늘 날짜에서 입사일을 빼보세요

select sysdate - hire date

from emp

설명 : 엄청난 소수점이 나오는 이유는 sysdate 가 시,분,초 까지 나오기 때문에 검색할때마다 값도 다르게 나온다.

소수점이 보기 싫으면 round 둘러주면 된다. or trunc ( 소수점 버리기)

문제 : 내가 태어난 날짜부터 오늘까지 총 몇달 살았는지 출력하시오

select round(months_between(sysdate, birth))

from emp14

where ename = '노현정';

문제 : 이름 출력하고, 입사한 날짜부터 오늘까지 총 몇달 근무했는지

(소수점 이후를 다 자르기)

select ename, trunk(months_between(sysdate, birth)

from amp;


ADD_MONTH (개월 수 더한 날짜 출력)

select add_months('2019/05/01, 100)

from dual ;

예제 : 오늘 날 다음 200개월 뒤

select add_months (sysdate, 200)

from dual;

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

select next_day ('2021/05/05', '월요일')

for daul;

설명 : 월요일의 날짜가 출력되어진다.

예제 : 오늘날짜에서 100개월 뒤 돌아오는 월요일의 날짜

select next_day(add_months(sysdate, 100), '월요일')

from dual;

설명 : 함수를 중첩하여 사용할 수 있습니다.


LAST_DAY (해당 달의 날짜의 마지막 날짜를 출력 )

select last_day('2021/05/05')

from dual;

문제 : 오늘부터 요번달 말일까지 총 몇일 남았는지 출력

select last_day(sysdate)-sysdate

from dual;

→ sysdate 의 마지막날짜 last_day 를 출력하고 sysdate 를 빼줘서 날짜를 출력해 준다.