SQL WHERE 날짜

: ) YOUNG·2025년 9월 13일

SQL

목록 보기
4/6

MySQL에서 날짜 사이의 값을 구하는 가장 일반적이고 효율적인 방법은 BETWEEN 연산자를 사용하는 것입니다.

1. 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'인 데이터를 모두 포함합니다.


2. 부등호(>=, <=) 사용법

BETWEEN과 완전히 동일한 결과를 내며, 좀 더 명시적으로 범위를 지정할 수 있습니다.

형식

SELECT *
FROM 테이블명
WHERE 날짜컬럼 >= '시작일' AND 날짜컬럼 <= '종료일';

예시


SELECT *
FROM sales
WHERE sale_date >= '2025-08-01' AND sale_date <= '2025-08-15';

⚠️ DATETIME 타입 사용 시 주의사항

만약 컬럼이 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...)을 올바르게 포함할 수 있습니다.

0개의 댓글