[MySQL] DATE_ADD, DATE_SUB 함수 등...

niz w·2024년 11월 21일

SQL

목록 보기
9/17

지금으로부터 특정 날짜까지 계산하는 명령어를 알아보고자 한다.🤔




1. DATE_ADD

DATE_ADD(date, INTERVAL expr unit)

  • dateDATE 타입이면서, unitYEAR, MONTH, DAY인 경우 DATE 타입을 반환한다.
  • dateDATETIME 또는 TIMESTAMP이면서 unit이 시간 계산용 HOURS, MINUTES, SECONDS이면 DATETIME 반환한다.
> SELECT DATE_ADD('20241123', INTERVAL 1 DAY);
=> 2024-11-23 (오늘의 다음 날)
> SELECT DATE_ADD('20241123', INTERVAL 2 HOUR);
=> 2024-11-22 01:00:00 (오늘 날짜에 1시간 더함)
> SELECT DATE_ADD(now(), INTERVAL 1 DAY);
=> 2024-11-23 09:19:34 (DATETIME을 리턴)
> SELECT DATE_ADD('20241123', INTERVAL -1 DAY);
=> 2024-11-21 (음수 값도 가능)

이런 예시로, expr 부분에 적절한 수를 넣어준 뒤 어느 unit에 적용되는지 설정해주면 된다!
expr 부분은 저렇게 직접적인 숫자도 되고... 아래에 DAYOFMONTH 등 기타 명령어를 통한 값도 상관없다!




2. DATE_SUB

DATE_SUB(date, INTERVAL expr unit)

DATE_ADD와 동일하며 날짜를 빼주는 역할을 한다.

> SELECT DATE_SUB('20241122', INTERVAL 1 DAY);
=> 2024-11-21



3. LAST_DAY

입력한 날짜가 있는 달의 말일을 구할 수 있다.

> SELECT LAST_DAY(now());
=> 2024-11-30 (이번 달의 마지막 날)

여기에 DATE_SUBDATE_ADD를 함께 쓸 수도 있다.

> SELECT LAST_DAY(DATE_ADD(now(), INTERVAL 3 MONTH));
=> 2025-02-28 (3달 뒤의 마지막 날)
> SELECT LAST_DAY(DATE_ADD(now(), INTERVAL 30 DAY));
=> 2024-12-31 (30일 뒤가 속한 달의 마지막 날)



4. FROM_UNIXTIME

해당 명령어는 UNIX_TIMESTAMP라는 값을 DATE 형식으로 맞춰주기 위해 사용한다.

UNIX_TIMESTAMP
유닉스형 DATE 타입으로 1970년 1월 1일 00:00:00부터 경과한 시간을
초로 환산하여 정수로 나타낸 값!

> SELECT UNIX_TIMESTAMP(now());
=> 1732235464

위와 같은 유닉스형 값을 실제 DATE 타입으로 바꿔주려고 한다.

FROM_UNIXTIME(유닉스형 날짜, 형식)
으로 작성해주면 되는데... 여기서 형식을 제외할 경우 DATETIME 타입의 형식이 그대로 출력된다!

> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(now());
=> 2024-11-22 09:38:39



5. DAYOFMONTH

날짜에서 '일'을 출력해주는 명령어다.

> SELECT DAYOFMONTH(now());
=> 22 (2024.11.22 이므로)



6. DAYOFWEEK & WEEKDAY

DAYOFWEEK은 기본적으로 1~7까지의 숫자일요일~토요일 순으로 의미한다.

> SELECT DAYOFWEEK(now());
=> 6 (금요일이므로 6 출력)

이와 유사하지만 WEEKDAY0~6까지의 숫자월요일~일요일 순으로 의미한다.

> SELECT WEEKDAY(now());
=> 4 (금요일이므로 4 출력)



7. DATEDIFF

두 날짜 사이의 차이를 구해주는 명령어다.
DATEDIFF(date1, date2)의 형태로 쓰여서 date1-date2의 값을 보여준다.

> SELECT DATEDIFF(now(), DATE_ADD(now(), INTERVAL 3 DAY));
=> -3 (오늘과 3일 뒤의 날짜 차이)
> SELECT DATEDIFF(now(), DATE_SUB(now(), INTERVAL 5 YEAR));
=> 1827 (오늘과 오늘로부터 5년 전의 날짜 차이)



8. CURDATE

CURDATE오늘 날짜를 출력해주는 명령어다.
NOW()와 다른 점은 NOW는 DATETIME 형식이고, CURDATE는 DATE 형식으로 출력된다.

> SELECT CURDATE();
=> 2024-11-22
> SELECT NOW();
=> 2024-11-22 09:46:49

0개의 댓글