Pergunta

Estou tentando reproduzir essa consulta SQL que usei com o ActiveRecord:

Post.all(:conditions => ["EXTRACT(MONTH from created_at) = ? AND EXTRACT(YEAR from created_at) = ?", month, year])

Mas como estou convertendo tudo para Datamapper, eu estava procurando uma maneira de fazer isso ...

Alguém pode ajudar?

Foi útil?

Solução

Presumo que, já que isso é marcado com "Ruby-on-Rails" que você carrega o ACTIVESUPPPORT. Isso fornecerá o tempo#end_of_month Helper Method. Com ele, você pode reescrever sua consulta como:

time = Date.new(year, month).to_time

Post.all(:created_at => time..time.end_of_month)

Isso não é apenas mais simples, mas também elimina o SQL bruto da consulta (a consulta é mais portátil para outras coisas que não o RDBMS), e o mais importante é que provavelmente terá um desempenho muito melhor do que a outra consulta. Com EXTRACT O banco de dados provavelmente terá que realizar uma varredura completa para extrair o ano e o mês de CreateD_AT em cada linha, e, em seguida, compare -os com seus valores esperados. Se você possui um conjunto de dados grande, isso pode ser uma carga significativa no seu banco de dados. No entanto, desde que sua coluna criada_at seja indexada, a abordagem acima deve ser extremamente eficiente em comparação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top