@events = Event.all(:order => "date DESC")
按日期订购我的活动,datetime
列。
是否可以按日期订购,但只能按小时订购? (我起诉sqlite3
数据库)
谢谢!
答案 0 :(得分:6)
对于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');
只有一个日期是1月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 :(得分:1)
由于Heroku使用PostgreSQL,您可以使用:
@events = Event.all(:order => "date_part(hour, date) DESC")
如果在本地使用SQLite3而PostgreSQL用于部署,则会遇到问题 - 平台之间的SQL不一致。