본문 바로가기
DataBase

MySql 날짜 시간 더하기, 빼기(YEAR, MONTH, DAY등 UNIT 정리)

by 맑은안개 2021. 10. 19.

From pixabay

1. Overview


MySql에서 제공하는 DATE_ADD(), DATE_SUB() 함수를 사용하여 특정 날짜에 시간을 더하거나 뺄 수 있다. 

 

2. How to use


2.1. 시간 더하기

DATE_ADD(date, INTERVAL expr unit)

  • 첫 번째 인자인 date 파라미터가 date이면서 unitYEAR, MONTH 혹은 DAY인 경우 date 타입으로 리턴한다.
  • 첫 번째 인자인 date 파라미터가 datetime(혹은 timestamp)이고 unit이 시간을 계산하는 HOURSMINUTES, or SECONDS이면, datetime타입으로 리턴한다.
mysql> SELECT DATE_ADD('20211018', INTERVAL 1 DAY); -- '2021-10-18' 동일

2021-10-19

SELECT DATE_ADD('20211018', INTERVAL 1 HOUR); -- 위의 입력값에 1시간을 더하는 경우

2021-10-18 01:00:00

mysql> SELECT DATE_ADD(NOW(), INTERVAL 1 DAY); -- datetime을 리턴하는 now()

2021-10-19 22:03:46

DATE_ADD 함수는 마이너스(음수) 기호를 사용하여 시간을 뺄 수 있다. ( = DATE_SUB )

mysql> SELECT DATE_ADD('20211018', INTERVAL -1 HOUR);

2021-10-17 23:00:00

2.2 시간 빼기

DATE_SUB(date, INTERVAL expr unit)

사용법은 DATE_ADD와 동일하다.

mysql> SELECT DATE_SUB('20210301', INTERVAL 1 MONTH);

2021-02-01

 

입력 날짜의 한달 전 말일 구하기

상대적으로 구해야 하므로 DAY가 아닌 MONTH를 사용해야 한다. 

SELECT LAST_DAY(DATE_SUB('20210301', INTERVAL 1 MONTH));

2021-02-28

SELECT LAST_DAY(DATE_SUB('20210301', INTERVAL 30 DAY)); -- 잘못된 예

2021-01-31

 

UNIX_TIMESTAMP 시간 더하기

mysql> SELECT UNIX_TIMESTAMP();

1634563245

mysql> SELECT DATE_SUB(FROM_UNIXTIME(UNIX_TIMESTAMP()), INTERVAL 1 DAY);

2021-10-17 22:20:45

mysql> SELECT DATE_SUB(FROM_UNIXTIME(1634563245), INTERVAL 1 DAY); -- 위와 같다.

2021-10-17 22:20:45

 

계산한 날짜가 주말인지 판단하기

mysql> SELECT CASE WHEN DAYOFWEEK(DATE_SUB('20211018', INTERVAL 2 DAY)) IN (1, 7) THEN 'WEEKEND'
            ELSE 'WEEKDAY' END ;

WEEKEND

mysql> SELECT CASE WHEN DAYOFWEEK(DATE_SUB('20211018', INTERVAL 3 DAY)) IN (1, 7) THEN 'WEEKEND'
            ELSE 'WEEKDAY' END ;
            
WEEKDAY

DAYOFWEEK 함수 결과 값은 NUMBER를 반환한다. 1은 일요일, 7은 토요일이다. 

 

3. 시간 간격 표현식 ( INTERVAL EXPRESSION )


unit Value Expected expr Format
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES:SECONDS.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS:MINUTES:SECONDS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_MICROSECOND 'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'

출처: https://dev.mysql.com/doc/refman/8.0/en/expressions.html#temporal-intervals

 

날짜 시간을 더하고 빼는 함수를 다루다 보니 뜬금없지만 필립 짐바르도의 나는 왜 시간에 쫓기는가? 라는 책이 생각난다. 시간 관념에 대해 깊은 통찰을 줄 것이다. 꼭 읽어 보시길..

 

반응형