MySQL에서 TIMESTAMP 컬럼의 값이 실제로 설정되어 있는지(유효한 날짜 값인지) 확인해야 하는 경우가 있습니다. 예를 들어 '0000-00-00'처럼 초기화되지 않은 값과 실제 날짜 값을 구분하고 싶을 때 유용합니다. 이 글에서는 간단한 비교 연산자를 활용해 타임스탬프 설정 여부를 확인하는 방법을 단계별로 살펴보겠습니다.
1. 테스트용 테이블 생성
먼저 TIMESTAMP 타입의 컬럼을 가진 테이블을 생성합니다.
mysql> create table DemoTable855(DueDate timestamp);
Query OK, 0 rows affected (0.54 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용하여 유효한 날짜 값과 함께 초기화되지 않은 값('0000-00-00')도 함께 입력합니다.
mysql> insert into DemoTable855 values('2019-08-07');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable855 values('0000-00-00');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable855 values('2019-07-06');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable855 values('2016-04-10');
Query OK, 1 row affected (0.16 sec)3. 전체 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable855;
실행 결과는 다음과 같습니다.
+----------------------+
| DueDate |
+----------------------+
| 2019-08-07 00:00:00 |
| 0000-00-00 00:00:00 |
| 2019-07-06 00:00:00 |
| 2016-04-10 00:00:00 |
+----------------------+
4 rows in set (0.00 sec)
4. 타임스탬프 설정 여부 확인 쿼리
MySQL에서는 내부적으로 '0000-00-00' 값이 숫자 0으로 처리되기 때문에, 비교 연산자(>)를 사용하면 타임스탬프가 실제로 설정되어 있는 레코드만 손쉽게 필터링할 수 있습니다.
mysql> select *from DemoTable855 where DueDate > 0;
위 쿼리의 실행 결과는 다음과 같습니다.
+----------------------+
| DueDate |
+----------------------+
| 2019-08-07 00:00:00 |
| 2019-07-06 00:00:00 |
| 2016-04-10 00:00:00 |
+----------------------+
3 rows in set (0.03 sec)
결과 분석
출력 결과를 보면 초기화되지 않은 값인 '0000-00-00' 레코드는 제외되고, 실제 날짜가 설정된 3개의 레코드만 반환된 것을 확인할 수 있습니다. 즉, WHERE DueDate > 0 조건은 타임스탬프가 유효하게 설정되어 있는지 판단하는 간단하면서도 효과적인 방법입니다.
참고로 MySQL 5.7 이상 버전에서는 기본 SQL 모드(NO_ZERO_DATE)에 따라 '0000-00-00' 값의 입력이 제한될 수 있으므로, 버전에 따라 동작 차이가 있을 수 있다는 점도 함께 고려하시기 바랍니다.