이따금씩 DATETIME 이나 TIMESTAMP필드에 존재하는 값들을 비교 혹은 연산이 필요한 쿼리문을 작성해야 할 때가 있습니다. 그때 쓰는게 TIMESTAMPDIFF 와 DATEDIFF입니다.
DATEDIFF는 단순하게 날짜간의 연산(빼기)를 할 때 쓰입니다.
DATEDIFF(날짜1, 날짜2)라는 코드를 작성하게 되면 단순하게 둘 날짜간의 차이만 연산해서
결과값을 도출 시켜 줍니다.
TIMESTAMPDIFF(단위, 날짜1, 날짜2)를 통해 필요한 연산값을 사용자가 선택해서 도출할 수 있게 도와줍니다.
예컨데 2022. 12. 10. 22:00
과 2022. 12. 10. 23:00
을 HOUR라는 단위를 넣으면 1이라는 값이 나오고 MINUTE을 넣으면 60 SECOND면 3600이라는 결과값이 나오게 됩니다.
TIMESTAMPDIFF(hour, NOW(), created_at ) > 1
이와같이 TIMESTAMPDIFF를 사용하면 데이터는 가공처리 된 것으로 인식됩니다. created_at이 만일 index로 설정이 되지 않았다면 별 문제는 없지만 만약 index로 설정되었다면 index가 제대로 작동하지 않은 문제가 발생합니다.
그러므로 인덱스가 설정된 항목을 비교할 때는 직접비교보다는
created_at > DATE_ADD(NOW(), INTERVAL -1 HOUR)
와 같이 DATE_ADD나 DATE_SUB같은 시간연산 함수로 연산값을 통해 인덱스와 비교해주시는게 좋습니다.