Я предполагаю, что это помечено как "ruby-on-rails", что вы загрузили ActiveSupport. Это обеспечит вспомогательный метод Time # end_of_month. С его помощью вы можете переписать ваш запрос как:
time = Date.new(year, month).to_time
Post.all(:created_at => time..time.end_of_month)
Мало того, что это проще, оно исключает необработанный SQL из запроса (так что запрос более переносим к вещам, отличным от СУБД), и, что наиболее важно, он, вероятно, будет работать намного лучше, чем другой запрос. С EXTRACT
базе данных, скорее всего, придется выполнить полное сканирование таблицы, чтобы извлечь год и месяц из созданного_ в каждой строке , а затем сравнить их с ожидаемыми значениями. Если у вас большой набор данных, это может привести к значительной нагрузке на вашу БД. Тем не менее, при условии, что ваш столбец create_at проиндексирован, приведенный выше подход должен быть чрезвычайно эффективным по сравнению.