Med datum (och tider) blir många saker enklare om du använder >= start AND < end
.
Till exempel:
SELECT
user_id
FROM
user_logs
WHERE
login_date >= '2014-02-01'
AND login_date < '2014-03-01'
I det här fallet måste du fortfarande beräkna startdatumet för den månad du behöver, men det bör vara enkelt på många olika sätt.
Slutdatumet är också förenklat; lägg bara till exakt en månad. Inget bråk med 28:e, 30:e, 31:a, etc.
Denna struktur har också fördelen av att kunna upprätthålla användningen av index.
Många kanske föreslår ett formulär som följande, men de gör det inte använd index:
WHERE
DATEPART('year', login_date) = 2014
AND DATEPART('month', login_date) = 2
Detta innebär att man beräknar villkoren för varje enskild rad i tabellen (en skanning) och inte använder index för att hitta intervallet av rader som kommer att matcha (en intervallsökning).