Найти все записи, которые были созданы в определенный день недели - PullRequest
3 голосов
/ 24 ноября 2010

Мне нужно найти все записи, которые были созданы в определенный день недели. У меня есть только стандартные метки даты и времени. Как мне поступить в activerecord?

Ответы [ 3 ]

3 голосов
/ 22 февраля 2013

Чтобы ответить на вопрос Джастина

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

Это то, что я использую в своем приложении для postgres. При этом будут найдены все записи, созданные в тот же день недели, что и сегодня. Например, если сегодня был вторник, он найдет все записи, созданные во вторник.

2 голосов
/ 24 ноября 2010

Вы можете использовать функцию DAYOFWEEK в MySQL и передать ее опции: условий.Предположим, что у вас есть модель с именем Item, она вернет все элементы, созданные в воскресенье:

Item.all (: условие => ['dayofweek (made_at) =?', 1])

Используя Postgres, вы можете сделать что-то похожее с to_char .

Обратите внимание, что использование такой функции, вероятно, заставит базу данных выполнить полное сканирование таблицы, так как припо крайней мере MySQL не поддерживает добавление индекса к функции.Возможно, вы захотите перенести день недели в другой столбец, если вы планируете делать это часто.

1 голос
/ 24 ноября 2010

Получить секунды с начала эпохи Unix. Time.to_i делает это в Ruby.

Используйте модуль 7 для получения дня недели (от 0 до 6).

dayOfWeek = (epochseconds / 86400 ) % 7;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...