Рельсы - заказ по часам - PullRequest
       7

Рельсы - заказ по часам

4 голосов
/ 30 апреля 2011
@events = Event.all(:order => "date DESC")

чтобы упорядочить мои события по дате, столбец datetime.

Можно ли упорядочить их не по дате, а только по часам?(Я подаю в суд на sqlite3 базу данных)

Спасибо!

Ответы [ 2 ]

6 голосов
/ 30 апреля 2011

Для SQLite,

@events = Event.all(:order => "time(date) DESC")

Используйте это с осторожностью, поскольку оно игнорирует дату.(И см. «Моменты позже» ниже.)

CREATE TABLE test (date datetime primary key);
INSERT INTO "test" VALUES('2011-01-01 08:00:00');
INSERT INTO "test" VALUES('2011-01-01 08:13:00');
INSERT INTO "test" VALUES('2011-01-01 09:23:00');
INSERT INTO "test" VALUES('2011-01-02 09:15:00');

Только одна из дат - 2 января.

sqlite> select * from test order by time(date) desc;
2011-01-01 09:23:00
2011-01-02 09:15:00
2011-01-01 08:13:00
2011-01-01 08:00:00

Моменты позже.,.

Я понял, что вы хотите сортировать по часам, а не по времени.Это сомнительное требование принимает другое выражение и сортирует по-разному.

@events = Event.all(:order => "strftime('%H', date) DESC")

sqlite> select date from test order by strftime('%H', date) desc;
2011-01-01 09:23:00
2011-01-02 09:15:00
2011-01-01 08:00:00
2011-01-01 08:13:00

Последние две строки отсортированы правильно по часам, неправильно по времени.

Еще позже.,.

OP развертывается на Heroku, который не поддерживает SQLite.Чтобы отсортировать по часу по убыванию, OP, вероятно, нужно что-то вроде

@events = Event.all(:order => "extract (hour from date) DESC")

и прекратить использовать одну платформу для разработки и другую платформу для развертывания.

1 голос
/ 01 мая 2011

Поскольку Heroku использует PostgreSQL, вы можете использовать:

@events = Event.all(:order => "date_part(hour, date) DESC")

У вас будут проблемы с разработкой, если вы будете использовать SQLite3 локально и PostgreSQL для развертывания - SQL несовместим между платформами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...