Я пытаюсь запросить мою базу данных postgresql, чтобы вернуть результаты, где дата находится в определенном месяце и году. Другими словами, мне нужны все значения за месяц-год.
Единственный способ, которым я смог это сделать, таков:
SELECT user_id
FROM user_logs
WHERE login_date BETWEEN '2014-02-01' AND '2014-02-28'
Проблема в том, что мне нужно вычислить первую и последнюю дату перед запросом таблицы. Есть способ сделать это попроще?
Спасибо
sql
postgresql
date
between
Джон
источник
источник
Ответы:
С датами (и временем) многие вещи становятся проще, если вы используете
>= start AND < end
.Например:
В этом случае вам все равно нужно рассчитать дату начала нужного вам месяца, но это должно быть прямо любым способом.
Дата окончания также упрощена; просто добавьте ровно один месяц. Никаких проблем с 28-м, 30-м, 31-м и т. Д.
Эта структура также имеет то преимущество, что она может поддерживать использование индексов.
Многие люди могут предложить такую форму, как следующая, но они не используют индексы:
Это включает в себя вычисление условий для каждой отдельной строки в таблице (сканирование) и отказ от использования индекса для поиска диапазона строк, которые будут соответствовать (поиск диапазона).
источник
2014-12-01
&2015-01-01
. Второй тоже можно проиндексировать, но, признаю, это нетривиально -EXTRACT()
кажется более совместимым.Начиная с PostreSQL 9.2 поддерживаются типы диапазонов . Вы можете написать это так:
это должно быть более эффективным, чем сравнение строк
источник
На всякий случай кто-нибудь приземлится здесь ... начиная с 8.1 вы можете просто использовать:
Из документов:
источник
Ключевое слово Between работает исключительно для даты. предполагается, что время для дат - 00:00:00 (т.е. полночь).
источник
Прочтите документацию.
http://www.postgresql.org/docs/9.1/static/functions-datetime.html
Я использовал такой запрос:
или
Хуанитос Инжениер.
источник