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() 등을 함께 고려하는 것이 좋습니다.