SQL에서 기간별 조건을 적용하려면 WHERE 절에 날짜 및 시간 필드를 사용하여 조건을 작성할 수 있습니다. 데이터베이스에서의 날짜와 시간 처리 방식에 따라 다양한 연산자를 활용할 수 있습니다.
다음은 몇 가지 일반적인 예제와 패턴입니다:
SELECT *
FROM orders
WHERE order_date BETWEEN '2024-12-01' AND '2024-12-10';
BETWEEN 연산자를 사용하여 시작 날짜(2024-12-01)와 종료 날짜(2024-12-10) 사이의 데이터를 필터링합니다.SELECT *
FROM orders
WHERE order_date >= '2024-12-01';
>=를 사용하여 특정 날짜 이후의 데이터를 선택합니다.SELECT *
FROM orders
WHERE order_date <= '2024-12-10';
<=를 사용하여 특정 날짜 이전의 데이터를 선택합니다.SELECT *
FROM orders
WHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);
DATE_SUB와 CURDATE()를 사용하여 현재 날짜로부터 7일 전부터의 데이터를 선택합니다.SELECT *
FROM orders
WHERE MONTH(order_date) = MONTH(CURDATE())
AND YEAR(order_date) = YEAR(CURDATE());
CURDATE()를 기준) 데이터를 필터링합니다.SELECT *
FROM orders
WHERE YEAR(order_date) = YEAR(CURDATE());
사용자가 시작 날짜와 종료 날짜를 입력한다고 가정하고, 이를 동적으로 조건에 추가할 수 있습니다:
SELECT *
FROM orders
WHERE order_date BETWEEN :start_date AND :end_date;
:start_date와 :end_date는 쿼리 실행 시 바인딩되는 값입니다.cursor.execute를 사용할 경우:cursor.execute("SELECT * FROM orders WHERE order_date BETWEEN %s AND %s", (start_date, end_date))날짜와 시간을 동시에 필터링하려면 DATETIME 형식을 사용합니다:
SELECT *
FROM logs
WHERE log_time BETWEEN '2024-12-01 08:00:00' AND '2024-12-01 18:00:00';
주중 또는 특정 요일 데이터를 선택하려면 DAYOFWEEK을 사용합니다:
SELECT *
FROM orders
WHERE DAYOFWEEK(order_date) = 2; -- 월요일 (1=일요일, 2=월요일, ...
필요에 따라 위 조건을 조합하여 복잡한 기간 조건을 만들 수 있습니다. 예를 들어, 특정 시간대에 발생한 지난 30일간의 데이터를 조회하려면:
SELECT *
FROM logs
WHERE log_time BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW()
AND TIME(log_time) BETWEEN '08:00:00' AND '18:00:00';