1. Overview
MySql에서 제공하는 DATE_ADD(), DATE_SUB() 함수를 사용하여 특정 날짜에 시간을 더하거나 뺄 수 있다.
2. How to use
2.1. 시간 더하기
DATE_ADD(date, INTERVAL expr unit)
- 첫 번째 인자인 date 파라미터가 date이면서 unit이 YEAR, MONTH 혹은 DAY인 경우 date 타입으로 리턴한다.
- 첫 번째 인자인 date 파라미터가 datetime(혹은 timestamp)이고 unit이 시간을 계산하는 HOURS, MINUTES, 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
날짜 시간을 더하고 빼는 함수를 다루다 보니 뜬금없지만 필립 짐바르도의 나는 왜 시간에 쫓기는가? 라는 책이 생각난다. 시간 관념에 대해 깊은 통찰을 줄 것이다. 꼭 읽어 보시길..
반응형
'DataBase' 카테고리의 다른 글
MySql - Public Key Retrieval is not allowed 오류 해결 (0) | 2022.01.27 |
---|---|
오라클 계층형 쿼리, 트리구조로 살펴보기(정렬, 최하위노드 찾기) (0) | 2022.01.26 |
오라클 replace 여러개(문자) 치환하기( regexp_replace 사용 ) (0) | 2022.01.25 |
MySql - 자주 사용하는 문자열 함수 8가지, 예제와 함께 살펴보자 (0) | 2022.01.07 |
MySql - 날짜 포맷 datetime to string 변환하기 (vs Oracle to_char 함수 비교 ) (0) | 2021.10.18 |