Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 CURDATE() 함수에 시간 단위 INTERVAL을 사용하면 어떻게 동작할까?

CURDATE() 함수와 시간 단위 INTERVAL의 조합

CURDATE() 함수는 날짜 값만 반환하기 때문에, 시간 단위의 INTERVAL과 함께 사용하면 다소 모호하게 느껴질 수 있습니다. 하지만 MySQL은 현재 날짜를 항상 '00:00:00'이라는 기본 시간과 함께 내부적으로 표현합니다. 따라서 CURDATE()에 시간 단위의 INTERVAL을 적용하면, 해당 시간 연산은 이 기본 시간(00:00:00)을 기준으로 계산됩니다.

다음 예제를 통해 실제 동작 방식을 확인해 보겠습니다.

mysql> Select CURDATE() + INTERVAL 0 hour;
+-----------------------------+
| curdate() + Interval 0 hour |
+-----------------------------+
| 2017-10-28 00:00:00         |
+-----------------------------+
1 row in set (0.00 sec)

mysql> select CURDATE() + INTERVAL 1 hour;
+-----------------------------+
| curdate() + Interval 1 hour |
+-----------------------------+
| 2017-10-28 01:00:00         |
+-----------------------------+
1 row in set (0.00 sec)

mysql> Select CURDATE() + INTERVAL 2 hour;
+-----------------------------+
| CURDATE() + INTERVAL 2 hour |
+-----------------------------+
| 2017-10-28 02:00:00         |
+-----------------------------+
1 row in set (0.00 sec)

결과 해석

위 실행 결과를 보면 CURDATE()가 기본적으로 시간 부분이 '00:00:00'인 값을 가진다는 것을 알 수 있습니다.

  • INTERVAL 0 hour : 0시간을 더했기 때문에 결과가 '2017-10-28 00:00:00'으로 그대로 유지됩니다.
  • INTERVAL 1 hour : 1시간이 더해져 '2017-10-28 01:00:00'이 됩니다.
  • INTERVAL 2 hour : 2시간이 더해져 '2017-10-28 02:00:00'이 됩니다.

정리

즉, CURDATE()에 시간 단위 INTERVAL을 더하면 MySQL이 날짜를 내부적으로 'YYYY-MM-DD 00:00:00' 형태로 처리하기 때문에, 결과값은 DATETIME 형식으로 반환되며 지정한 시간만큼 00:00:00에서부터 증가합니다. 이 원리를 이해하면 CURDATE()와 시간 단위 INTERVAL의 조합을 혼란 없이 자유롭게 활용할 수 있습니다.