MySQL에서 날짜 사이의 값을 구하는 가장 일반적이고 효율적인 방법은 BETWEEN 연산자를 사용하는 것입니다.
BETWEEN 연산자는 시작일과 종료일을 모두 포함(inclusive)하는 범위를 검색합니다.
SELECT *
FROM 테이블명
WHERE 날짜컬럼 BETWEEN '시작일' AND '종료일';
sales 테이블에서 2025년 8월 1일부터 8월 15일까지의 매출 데이터를 조회하는 경우입니다.
SELECT *
FROM sales
WHERE sale_date BETWEEN '2025-08-01' AND '2025-08-15';
➡️ 이 쿼리는 sale_date가 '2025-08-01'인 데이터와 '2025-08-15'인 데이터를 모두 포함합니다.
BETWEEN과 완전히 동일한 결과를 내며, 좀 더 명시적으로 범위를 지정할 수 있습니다.
SELECT *
FROM 테이블명
WHERE 날짜컬럼 >= '시작일' AND 날짜컬럼 <= '종료일';
SELECT *
FROM sales
WHERE sale_date >= '2025-08-01' AND sale_date <= '2025-08-15';
만약 컬럼이 DATE 타입이 아니라 시간까지 포함하는 DATETIME이나 TIMESTAMP 타입이라면 BETWEEN 사용 시 주의해야 합니다.
예를 들어, created_at 컬럼에서 '2025-08-15'까지의 데이터를 조회하고 싶을 때, 아래 쿼리는 '2025-08-15'의 시작 시간 (00:00:00)까지만 포함합니다. 즉, 8월 15일 하루 전체의 데이터가 누락될 수 있습니다.
-- 잘못된 예: '2025-08-15 00:00:00' 이후의 데이터는 조회되지 않음
SELECT *
FROM logs
WHERE created_at BETWEEN '2025-08-01' AND '2025-08-15';
이때는 종료일의 다음 날을 기준으로 '미만(<)' 조건을 사용하는 것이 가장 정확합니다.
SQL
SELECT *
FROM logs
WHERE created_at >= '2025-08-01' AND created_at < '2025-08-16';
이렇게 하면 '2025-08-16' 00시 00분 00초 바로 직전까지, 즉 8월 15일의 모든 시간(23:59:59...)을 올바르게 포함할 수 있습니다.