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

MySQL에서 현재 연도 1월 1일을 Epoch(유닉스 타임스탬프)로 변환하는 방법

MySQL에서 현재 연도의 1월 1일을 Epoch 시간(유닉스 타임스탬프)으로 변환해야 하는 경우가 종종 있습니다. 이때는 UNIX_TIMESTAMP() 함수를 활용하면 간단하게 처리할 수 있습니다.

UNIX_TIMESTAMP() 함수를 사용한 변환 방법

핵심 아이디어는 CURDATE() 함수로 현재 날짜에서 연도를 추출한 뒤, CONCAT()으로 'YYYY-01-01' 형태의 문자열을 만들어 UNIX_TIMESTAMP()에 전달하는 것입니다.

mysql> Select UNIX_TIMESTAMP(CONCAT(YEAR(CURDATE()),'-01-01'));
+--------------------------------------------------+
| UNIX_TIMESTAMP(CONCAT(YEAR(CURDATE()),'-01-01')) |
+--------------------------------------------------+
| 1483209000                                       |
+--------------------------------------------------+
1 row in set (0.03 sec)

쿼리 동작 원리

  • YEAR(CURDATE()): 현재 날짜에서 연도 값만 추출합니다. 예를 들어 2017년이라면 2017을 반환합니다.
  • CONCAT(YEAR(CURDATE()), '-01-01'): 추출한 연도와 '-01-01'을 연결하여 '2017-01-01'과 같은 날짜 문자열을 생성합니다.
  • UNIX_TIMESTAMP(): 해당 날짜 문자열을 자정 기준의 유닉스 타임스탬프(초 단위)로 변환합니다.

결과 검증하기

변환된 타임스탬프가 올바른지 확인하려면 반대 방향의 FROM_UNIXTIME() 함수를 사용하면 됩니다. 숫자형 타임스탬프를 다시 사람이 읽을 수 있는 날짜·시간 형식으로 되돌려 줍니다.

mysql> Select FROM_UNIXTIME(1483209000);
+---------------------------+
| FROM_UNIXTIME(1483209000) |
+---------------------------+
| 2017-01-01 00:00:00       |
+---------------------------+
1 row in set (0.02 sec)

결과가 '2017-01-01 00:00:00'으로 표시되는 것을 통해, 해당 타임스탬프가 정확히 그해 1월 1일 자정을 가리킨다는 것을 확인할 수 있습니다.

참고 사항

이 방법은 쿼리가 실행되는 시점의 연도를 기준으로 동작하기 때문에, 매년 새해가 되어도 별도의 수정 없이 자동으로 해당 연도의 1월 1일 타임스탬프를 반환한다는 장점이 있습니다. 또한 서버의 타임존 설정에 따라 결과값이 달라질 수 있으므로, 특정 시간대 기준의 값이 필요하다면 CONVERT_TZ() 등을 함께 고려하는 것이 좋습니다.