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

MySQL에서 DATETIME 값에서 3시간을 빼는 방법 완벽 정리

MySQL에서 DATETIME 타입의 값에서 3시간을 빼야 하는 경우가 종종 있습니다. 예를 들어 로그 기록 시간 보정이나 시간대 차이 계산 등이 대표적인 활용 사례입니다. 이때 DATE_ADD() 함수와 DATE_SUB() 함수를 사용하면 간단하게 처리할 수 있습니다.

방법 1: DATE_ADD() 함수 사용하기

DATE_ADD()는 이름 그대로 날짜와 시간을 더하는 함수이지만, 음수 값을 전달하면 빼기 연산과 동일한 효과를 냅니다.

SELECT DATE_ADD(컬럼명, INTERVAL -3 HOUR) FROM 테이블명;

방법 2: DATE_SUB() 함수 사용하기

DATE_SUB()는 날짜와 시간을 빼는 전용 함수입니다. 더 직관적이므로 시간을 감산할 때는 이 방법을 권장합니다.

SELECT DATE_SUB(컬럼명, INTERVAL 3 HOUR) FROM 테이블명;

실전 예제로 확인하기

먼저 NOW() 함수를 사용해 현재 날짜와 시간을 확인해 보겠습니다.

mysql> SELECT NOW();

실행 결과는 다음과 같습니다.

+---------------------+
| now()               |
+---------------------+
| 2018-11-30 10:13:23 |
+---------------------+
1 row in set (0.00 sec)

DATE_ADD() 적용 결과

이제 DATE_ADD()에 음수 간격(-3시간)을 지정하여 현재 시간에서 3시간을 빼 보겠습니다.

mysql> SELECT DATE_ADD(NOW(), INTERVAL -3 HOUR);

결과를 확인하면 3시간이 정상적으로 차감된 것을 볼 수 있습니다.

+----------------------------------+
| date_add(now(),interval -3 hour) |
+----------------------------------+
| 2018-11-30 07:13:28              |
+----------------------------------+
1 row in set (0.00 sec)

DATE_SUB() 적용 결과

다시 한번 현재 날짜와 시간을 조회합니다.

mysql> SELECT NOW();
+---------------------+
| now()               |
+---------------------+
| 2018-11-30 10:14:12 |
+---------------------+
1 row in set (0.00 sec)

두 번째 방법인 DATE_SUB()를 적용한 쿼리는 다음과 같습니다.

mysql> SELECT DATE_SUB(NOW(), INTERVAL 3 HOUR);

마찬가지로 3시간이 빠진 결과가 출력됩니다.

+---------------------------------+
| date_sub(now(),interval 3 hour) |
+---------------------------------+
| 2018-11-30 07:14:25             |
+---------------------------------+
1 row in set (0.00 sec)

정리 및 추가 팁

두 함수 모두 동일한 결과를 반환하지만, 의미상으로는 시간을 뺄 때 DATE_SUB()를 사용하는 것이 코드 가독성 측면에서 더 좋습니다. 또한 INTERVAL 단위는 HOUR 외에도 DAY, MONTH, YEAR, MINUTE, SECOND 등 다양하게 지원되므로 필요에 따라 유연하게 활용할 수 있습니다.

참고로 특정 컬럼의 값을 기준으로 연산하고 싶다면 NOW() 대신 해당 컬럼명을 넣으면 되며, 결과를 다른 컬럼에 저장하려면 UPDATE 문과 함께 조합하여 사용하면 됩니다.