С датите (и часовете) много неща стават по-прости, ако използвате >= start AND < end
.
Например:
SELECT
user_id
FROM
user_logs
WHERE
login_date >= '2014-02-01'
AND login_date < '2014-03-01'
В този случай все още трябва да изчислите началната дата на месеца, от който се нуждаете, но това трябва да е направо по произволен брой начини.
Крайната дата също е опростена; просто добавете точно един месец. Без да се забърквате с 28, 30, 31 и т.н.
Тази структура също има предимството, че може да поддържа използването на индекси.
Много хора може да предложат формуляр като следния, но тене използвайте индекси:
WHERE
DATEPART('year', login_date) = 2014
AND DATEPART('month', login_date) = 2
Това включва изчисляване на условията за всеки отделен ред в таблицата (сканиране) и не използване на индекс за намиране на диапазона от редове, които ще съвпадат (търсене на диапазон).