지금으로부터 특정 날짜까지 계산하는 명령어를 알아보고자 한다.🤔
DATE_ADD(date, INTERVAL expr unit)
DATE 타입이면서, unit이 YEAR, MONTH, DAY인 경우 DATE 타입을 반환한다.DATETIME 또는 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 등 기타 명령어를 통한 값도 상관없다!
DATE_SUB(date, INTERVAL expr unit)
DATE_ADD와 동일하며 날짜를 빼주는 역할을 한다.
> SELECT DATE_SUB('20241122', INTERVAL 1 DAY);
=> 2024-11-21
입력한 날짜가 있는 달의 말일을 구할 수 있다.
> SELECT LAST_DAY(now());
=> 2024-11-30 (이번 달의 마지막 날)
여기에 DATE_SUB나 DATE_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일 뒤가 속한 달의 마지막 날)
해당 명령어는 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
날짜에서 '일'을 출력해주는 명령어다.
> SELECT DAYOFMONTH(now());
=> 22 (2024.11.22 이므로)
DAYOFWEEK은 기본적으로 1~7까지의 숫자가 일요일~토요일 순으로 의미한다.
> SELECT DAYOFWEEK(now());
=> 6 (금요일이므로 6 출력)
이와 유사하지만 WEEKDAY는 0~6까지의 숫자가 월요일~일요일 순으로 의미한다.
> SELECT WEEKDAY(now());
=> 4 (금요일이므로 4 출력)
두 날짜 사이의 차이를 구해주는 명령어다.
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년 전의 날짜 차이)
CURDATE는 오늘 날짜를 출력해주는 명령어다.
NOW()와 다른 점은 NOW는 DATETIME 형식이고, CURDATE는 DATE 형식으로 출력된다.
> SELECT CURDATE();
=> 2024-11-22
> SELECT NOW();
=> 2024-11-22 09:46:49