[MySQL/Maria] 자주쓰이는 DATE Query

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 / %y2023 / 23
%M / %mNovember / 11
%D / %d27th / 27
%H / %h14 / 02
%i10
%s20
마이크로%f0000
시:분:초%T14: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 와 같은 함수가 적용이 되는데
그냥 포맷만 맞춰주면 되나봅니다. 이건 버전에 따라 안될수도 있습니다.

Leave a Comment