ADDDATE (날짜 더하기/빼기)
먼저, 가장 자주 쓰게 되는 쿼리로 날짜 더하기/빼기 입니다.
ADDDATE 혹은 DATE_ADD 를 사용합니다.
년 | year |
월 | month |
일 | day |
일 더하기 select adddate(now(),interval 1 day); 일 빼기 select adddate(now(),interval -1 day); 달 더하기 select adddate(now(),interval 1 month); 달 빼기 select adddate(now(),interval -1 month); 년 더하기 select adddate(now(),interval 1 year); 년 빼기 select adddate(now(),interval -1 year);
개발 하실때 주의하실 점 한가지 말씀드리 year 입니다.
뭐를 주의해야하냐구요..?
바로 윤달 입니다.
2020년은 윤달이 있는 해로서 2월 29일이 있는데요.
select adddate('2020-02-28', interval 1 year); 결과 : 2021-02-28 select adddate('2020-02-29', interval 1 year); 결과 : 2021-02-28
2020년처럼 윤달이 있는 해 일때 1 년을 더하면 28일로 동일한 결과가 나옵니다.
이러한 결과는 배치나 이런 곳에서 사용될때 28일로 2번 조건이 동일해지니 고민해야할 부분입니다.
년/월/일을 계산했다면 당연히 시/분/초도 가능합니다.
시 | hour |
분 | minute |
초 | second |
시간 더하기 select adddate(now(),interval 1 hour); 시간 빼기 select adddate(now(),interval -1 hour); 분 더하기 select adddate(now(),interval 1 minute); 분 빼기 select adddate(now(),interval -1 minute); 초 더하기 select adddate(now(),interval 1 second); 초 빼기 select adddate(now(),interval -1 second);
DATE_FORMAT(날짜 커스텀)
날짜 타입을 원하는 포맷으로 변경할때는 DATE_FORMAT 을 사용합니다.
2023년 11월 27일 14시 10분 20초 기준 입니다.
표현식 | 결과 | |
년 | %Y / %y | 2023 / 23 |
월 | %M / %m | November / 11 |
일 | %D / %d | 27th / 27 |
시 | %H / %h | 14 / 02 |
분 | %i | 10 |
초 | %s | 20 |
마이크로 | %f | 0000 |
시:분:초 | %T | 14:10:20 |
select date_format(now(),'%Y-%m-%d %T) 결과: '2023-11-27 14:10:20'
원하는 형태로 날짜 포맷을 변경해서 사용하시면 됩니다.
STR_TO_DATE(날짜 타입으로 형 변환)
위에 예시에서는 다 now()를 썼지만 우리가 원하는 날짜를 사용해야할 경우도 있죠.
그럴 경우에는 STR_TO_DATE 를 사용합니다.
기본적으로 포맷은 년-월-일 시:분:초 형태로 사용하시면 됩니다.
그런데 현재는 버전이 오르면서 편의를 위한건지 그냥 문자로 포맷만 맞춰줘도 날짜 타입으로 변경이 되네요.
기본 방식 select adddate(str_to_date('2023-01-01 14:10:20','%Y-%m-%d %T'),interval 1 day); 새로운 방식 select adddate('2023-01-01 14:10:20',interval 1 day);
기본적으로 DATE 타입이어야 adddate 와 같은 함수가 적용이 되는데
그냥 포맷만 맞춰주면 되나봅니다. 이건 버전에 따라 안될수도 있습니다.