본문 바로가기
SQL

[MySQL] datetime 과 BETWEEN A AND B

by 위시우 2024. 1. 26.

Datetime 칼럼으로 특정 기간의 데이터를 조회하려면 어떻게 해야할까?

예를 들어,2020-07-12 부터 2020-07-13까지의 회원가입한 유저의 목록을 추출한다고 가정하자.

SELECT *
  FROM USERS
WHERE CREATED_AT BETWEEN '2020-07-12' AND '2020-07-13'
;

자연스럽게 위와 같이 작성하게 된다.
하지만 결과값은 12일의 유저만 조회하게 된다.
왜일까?

Datetime type 칼럼의 경우, 이름에서 미루어 짐작할 수 있듯이 date + time 의 조합이다.
그런 만큼 time 을 명시하지 않을 경우, 00:00:00 이 디폴트 값으로 설정된다.
그렇다면 방금 전 쿼리는 다음과 같다.

   select *
     from users u 
    WHERE created_at BETWEEN '2020-07-12 00:00:00'  and "2020-07-13 00:00:00"
     ;

따라서 우리가 원하는 12, 13 일의 데이터를 모두 조회하기 위해서는 마지막 날의 time을 23:59:59으로 명시하여야 한다.
BETWEEN A AND B 의 연산은 A 이상 B이하 이지만
Datetime 의 미설정시 default 값이 00:00:00 으로 자동 설정되어 생기는 문제였다.

   select *
     from users u 
    WHERE created_at BETWEEN '2020-07-12 00:00:00'  and "2020-07-13 23:59:59"
     ;

댓글