SQL 날짜계산하기 (Oracle, MySQL, MSSQL)

날짜에서 더하거나 빼는 연산에 관한 내용입니다

 

Oracle에서 기본적인 날짜 연산

* SYSDATE함수는 실행될 때의 시간을 리턴합니다

SELECT SYSDATE + 1 --// 1일 후 출력

  이렇게 하면 현재 날짜에 1일이 추가되어 출력됩니다 하루 전을 출력하려면 ( + )를 ( - )로 바꾸면 되겠죠

  이 부분을 응용해서 1시간 1분 1초 후 등 다양하게 출력 가능합니다

  1이 하루이기 때문에 1을 24로 나누면 1시간 거기서 60으로 또 나누면 1분 또 60으로 나누면 1초가 되겠죠?

SELECT SYSDATE + 1/24 --// 1시간 후
SELECT SYSDATE + 1/24/60 --// 1분 후
SELECT SYSDATE + 1/24/60/60 --// 1초 후

 

ADD_MONTHS 함수를 이용해 ??달 전 후를 출력할 수 있습니다

ADD_MONTHS(날짜, 숫자)  --// 날짜에서 숫자만큼 월을 더한다
SELECT ADD_MONTHS(SYSDATE, 3) --// 3달 후를 출력합니다
SELECT ADD_MONTHS(SYSDATE, -3) --// 3달 전을 출력합니다

 

LAST_DAY(날짜) 함수를 이용해 날짜의 월에 마지막 날을 출력합니다

SELECT LAST_DAY(SYSDATE) --// 현재 9월이라 2019-09-30이 출력 됩니다

 

( - ) 연사자로 날짜 사이의 차이를 구할 수 있습니다

SELECT SYSDATE - TO_DATE('20190926', 'YYYYMMDD') --// 현재 날짜와 2019/09/26의 차이를 구합니다

  이때 주의할 점은 날짜 빼기를 하면 시간 부분도 계산이 되어 소수점 숫자가 나옵니다

  TRUNC 함수를 날짜에 사용하면 년월일만 남기고 시간 부분은 모두 0으로 잘라 사용하면 됩니다

SELECT TRUNC(SYSDATE) - TO_DATE('20190926', 'YYYYMMDD')

 

MONTHS_BETWEEN(날짜, 날짜) 함수로 두 날짜 사이의 월 수 계산 가능합니다

SELECT MONTHS_BETWEEN(SYSDATE, ADD_MONTHS(SYSDATE, 3)) --// 결과: 3

  현재 날짜와 현재 날짜에서 3 월더 한 날짜의 월수 차이를 계산합니다 당연히 3이 리턴됩니다


MySQL에서의 날짜 연산

DATE_ADD 함수를 사용합니다 - DATE_ADD(날짜, INTERVAL 숫자 계산 형식)

계산형식
DATE_ADD(SYSDATE, INTERVAL 1 MONTH)
DATE_ADD(SYSDATE, INTERVAL 1 DAY)
시간 DATE_ADD(SYSDATE, INTERVAL 1 HOUR)
DATE_ADD(SYSDATE, INTERVAL 1 MINUTE)
DATE_ADD(SYSDATE, INTERVAL 1 SECOND)

예를 들어 보자면

SELECT DATE_ADD(SYSDATE, INTERVAL 3 MONTH) FROM DUAL
  --// 현재 날짜에서 3월을 더한 2019-12-16 출력
SELECT DATE_ADD(SYSDATE, INTERVAL -3 MONTH) FROM DUAL
  --// 현재 날짜에서 3월을 뺀 2019-06-16 출력

MSSQL에서의 날짜 연산

MSSQL에서 날짜 더하거나 뺄 때는 DATEADD 함수를 사용한다

DATEADD(시간 단위, 더할 수치, 기준 시간)

  시간 단위에는 DAY대신 DD, MONTH대신 MM, YEAR대신 YY 쓸 수 있다 물론 풀네임으로 써도 된다

SELECT DATEADD(DAY, 5, GETDATE()) --// 현재날짜에서 5일을 더한다
SELECT DATEADD(MONTH, 2, GETDATE()) --// 현재날짜에서 2월을 더한다
SELECT DATEADD(YEAR, -4, GETDATE()) --// 현재날짜에서 4년을 뺀다

 

월의 첫째 날 구하기

SELECT DATEADD(DAY, -(DAY(GETDATE()-1))[ 현재 날짜에서 하루를 뺀 날짜 값 ], GETDATE())

  현재 16일이라면 15일을 빼기 때문에  1일 즉 첫날이 출력된다

 

월의 마지막 날 구하기

SELECT DATEADD(MONTH, 1, GETDATE()) - DAY(GETDATE())

  다음 달에서 현재 날짜만큼 날을 빼면 자동적으로 현재 월의 마지막 날이 출력

 

10개월 전의 마지막 날 구하기

SELECT DATEADD(MONTH, -9, GETDATE()) - DAY(GETDATE())

  9개월 전으로 돌아간 뒤 현재 날짜를 빼게 되면 자동으로 10개월 전의 마지막 날이 출력

 

DATEDIFF 함수를 통해 시간의 차이를 알 수 있다

DATEDIFF(시간 단위, 시작 시간, 종료시간)
SELECT DATEDIFF( MI, GETDATE(), GETDATE()+2 ) --// 2880분 ( 2일 ) 출력

  현재 날짜로부터 2일 후의 날짜와의 시간 차이를 분으로 출력하라는 내용이다

  시간 단위를 시간 , 일 , 월 , 년 등 다양하게 바꿔 출력할 수 있다

 

 

이상으로 포스팅을 마치겠습니다

도움이 되셨다면 공감 버튼 부탁드려요~