@events = Event.all(:order => "date DESC")
要按日期对我的事件进行排序,datetime
列。
是否可以不按日期,而只按小时订购? (我正在起诉 sqlite3
数据库)
谢谢!
最佳答案
对于 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 部署在不支持 SQLite 的 Heroku 上。要按小时降序排序,OP 可能需要类似
@events = Event.all(:order => "extract (hour from date) DESC")
并停止使用一个平台进行开发而使用不同的平台进行部署。
关于ruby-on-rails - Rails - 按小时排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5841173/