2010-11-24 2 views
3

Ich muss alle Datensätze finden, die an einem bestimmten Wochentag erstellt wurden. Ich habe nur das Standardmodell Datetime Timestamps. Wie würde ich das im Active Record machen?Suchen Sie alle Datensätze, die an einem bestimmten Wochentag erstellt wurden

+0

Schienen 2 oder 3? Meinst du einen bestimmten Tag, z.B. 24.11.2010 oder nur "Donnerstag" als Wochentag? –

+0

Verwandte Frage? http://stackoverflow.com/questions/742277/rails-find-tasks-that-were-created-on-a-certain-day –

Antwort

2

Sie können die DAYOFWEEK-Funktion in MySQL verwenden und an die Option: conditions übergeben. Angenommen, Sie ein Modell namens Artikel haben, würde dies alle der am Sonntag erstellten Elemente zurück:

Einzelteil bekannt (: conditions => [ '? Dayofweek (created_at) =', 1])

Mit Postgres können Sie etwas ähnliches mit to_char tun.

Beachten Sie, dass die Verwendung einer solchen Funktion wahrscheinlich dazu führt, dass die Datenbank einen vollständigen Tabellenscan durchführt, da zumindest MySQL das Hinzufügen eines Indexes zu einer Funktion nicht unterstützt. Sie können in Erwägung ziehen, den Wochentag in eine andere Spalte zu extrahieren, wenn Sie dies häufig vorziehen.

+0

Dies ist perfekt, danke. – KJF

1

Erhalten Sie die Sekunden seit Unix Epoch. Time.to_i tut dies in Ruby.

Verwenden Sie Modul von 7, um den Wochentag zu erhalten (0 bis 6).

dayOfWeek = (epochseconds/86400) % 7; 
3

Um Follow-up auf Justins Antwort

where("extract(dow from created_at) = ?", Date.today.wday) 

Dies ist, was für Postgres in meiner Anwendung ich verwende. Dadurch werden alle Datensätze gefunden, die am selben Wochentag erstellt wurden wie heute. Wenn heute beispielsweise Dienstag wäre, würde es alle Datensätze finden, die dienstags erstellt wurden.

Verwandte Themen