Với ngày (và giờ), nhiều thứ trở nên đơn giản hơn nếu bạn sử dụng >= start AND < end
.
Ví dụ:
SELECT
user_id
FROM
user_logs
WHERE
login_date >= '2014-02-01'
AND login_date < '2014-03-01'
Trong trường hợp này, bạn vẫn cần phải tính toán ngày bắt đầu của tháng bạn cần, nhưng điều đó phải được tính thẳng theo bất kỳ cách nào.
Ngày kết thúc cũng được đơn giản hóa; chỉ cần thêm đúng một tháng. Không có vấn đề gì với 28, 30, 31, v.v.
Cấu trúc này cũng có lợi thế là có thể duy trì việc sử dụng các chỉ mục.
Nhiều người có thể đề xuất một biểu mẫu như sau, nhưng họ không sử dụng các chỉ mục:
WHERE
DATEPART('year', login_date) = 2014
AND DATEPART('month', login_date) = 2
Điều này liên quan đến việc tính toán các điều kiện cho mọi hàng đơn lẻ trong bảng (quét) và không sử dụng chỉ mục để tìm phạm vi các hàng sẽ khớp (tìm kiếm phạm vi).