2013-06-19 3 views
0

я хотел бы восстановить список записей за текущий месяц с Sequel, я попробовать:Получить текущий месяц с Sequel

Entry.where(:date >= Date.month).sum(:duration) 

или

Entry.where(:date.like('%/06/2013')).sum(:duration) 

и другие ...

Но никто из них не работал

Заранее благодарен

ответ

0

Вы должны думать в терминах того, как думает база данных, и как Sequel превращает рубин диапазоны в SQL:

require 'date' 

today = Date.today       # => #<Date: 2013-07-03 ((2456477j,0s,0n),+0s,2299161j)> 
first_of_month = (today - today.day) + 1 
first_of_month        # => #<Date: 2013-07-01 ((2456475j,0s,0n),+0s,2299161j)> 
next_month = today + 31      # => #<Date: 2013-08-03 ((2456508j,0s,0n),+0s,2299161j)> 
last_of_month = next_month - next_month.day # => #<Date: 2013-07-31 ((2456505j,0s,0n),+0s,2299161j)> 
last_of_month        # => #<Date: 2013-07-31 ((2456505j,0s,0n),+0s,2299161j)> 

Entry.where(:date => [first_of_month .. last_of_month]).sum(:duration) 

Я хотел бы показать вам выход SQL, но я не знаю, базы данных типа, который вы используете, и, ну, я ленив.

Часто вы можете воспроизводить трюки внутри БД путем усечения «сейчас», чтобы удалить день, а затем найти все временные метки, усеченная дата которых совпадает с ним. Это гораздо более специфично для DBM, чем использование Sequel, которое уже знает, как справляться с диапазонами при преобразовании их в оператор «между» -типом.

0

Если вы хотите, чтобы все записи текущий месяц и текущий год, это, вероятно, проще всего использовать диапазон:

d = Date.today 
Entry.where(:date=> Date.new(d.year, d.month)...(Date.new(d.year, d.month) >> 1)).sum(:duration) 

Если вы хотите текущий месяц в любой год, Sequel имеет встроенную поддержку для этого:

Entry.where(Sequel.extract(:month, :date) => Date.today.month).sum(:duration) 
Смежные вопросы