MySQL에서 DATETIME 타입의 값을 정수(Integer)로 변환하려면 UNIX_TIMESTAMP() 함수를 사용하면 됩니다. 이 함수는 날짜/시간 값을 1970년 1월 1일 00:00:00 UTC(유닉스 에포크) 이후 경과한 초 단위의 정수 값으로 반환합니다.
기본 문법
SELECT UNIX_TIMESTAMP(yourDatetimeColumnName) as anyVariableName FROM yourTableName;
문법을 실제로 이해하기 위해 예제 테이블을 하나 만들어 보겠습니다.
1. 테이블 생성
아래 쿼리로 DatetimeToInteger 테이블을 생성합니다.
mysql> create table DatetimeToInteger
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> ArrivalTime datetime,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.94 sec)2. 데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다. 다양한 형태의 날짜 함수(now(), curdate(), date_add())를 함께 활용했습니다.
mysql> insert into DatetimeToInteger(ArrivalTime) values(now());
Query OK, 1 row affected (0.09 sec)
mysql> insert into DatetimeToInteger(ArrivalTime) values(curdate());
Query OK, 1 row affected (0.21 sec)
mysql> insert into DatetimeToInteger(ArrivalTime) values('2017-09-21 13:10:55');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DatetimeToInteger(ArrivalTime) values(date_add(now(),interval 3 year));
Query OK, 1 row affected (0.16 sec)3. 저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DatetimeToInteger;
실행 결과는 다음과 같습니다.
+----+---------------------+ | Id | ArrivalTime | +----+---------------------+ | 1 | 2019-01-22 15:12:45 | | 2 | 2019-01-22 00:00:00 | | 3 | 2017-09-21 13:10:55 | | 4 | 2022-01-22 15:14:32 | +----+---------------------+ 4 rows in set (0.00 sec)
4. DATETIME을 정수로 변환
이제 UNIX_TIMESTAMP() 함수를 사용해 DATETIME 값을 정수로 변환하는 쿼리입니다.
mysql> select unix_timestamp(ArrivalTime) as DateTimeToIntegerDemo from DatetimeToInteger;
변환 결과는 아래와 같습니다.
+-----------------------+ | DateTimeToIntegerDemo | +-----------------------+ | 1548150165 | | 1548095400 | | 1505979655 | | 1642844672 | +-----------------------+ 4 rows in set (0.00 sec)
참고 사항
UNIX_TIMESTAMP()가 반환하는 값은 초 단위 유닉스 타임스탬프입니다. 만약 밀리초 단위가 필요하다면 결과에 1000을 곱하거나, MySQL 5.6.4 이상에서는 UNIX_TIMESTAMP() * 1000 방식을 활용할 수 있습니다. 또한 이 값은 서버의 타임존 설정에 따라 달라질 수 있으므로, 여러 지역의 서버에서 동일한 데이터를 다룰 때는 주의가 필요합니다.