Rails - 按小时排序

Abr*_*odj 4 sqlite postgresql datetime ruby-on-rails heroku

@events = Event.all(:order => "date DESC")
Run Code Online (Sandbox Code Playgroud)

按日期,datetime列列出我的活动.

是不是可以按日期订购,但只能按小时订购?(我起诉sqlite3数据库)

谢谢!

Mik*_*ll' 6

对于SQLite,

@events = Event.all(:order => "time(date) DESC")
Run Code Online (Sandbox Code Playgroud)

小心使用它,因为它忽略了日期.(请参阅下面的"片刻".)

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');
Run Code Online (Sandbox Code Playgroud)

其中一个日期是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
Run Code Online (Sandbox Code Playgroud)

片刻之后...

我意识到你想要按小时排序,而不是按时间排序.那个有问题的要求采用了不同的表达方式,并且排序不同.

@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
Run Code Online (Sandbox Code Playgroud)

最后两行按小时正确排序,按时间错误排序.

还是晚一点...

OP在Heroku上部署,它不支持SQLite.要按小时降序排序,OP可能需要类似的东西

@events = Event.all(:order => "extract (hour from date) DESC")
Run Code Online (Sandbox Code Playgroud)

并停止使用一个平台进行开发,并停止使用不同的部署平台.

  • 如果您在Heroku上部署,则不应该针对SQLite进行开发.安装PostgreSQL,并将其用作您的开发平台. (4认同)
  • 我希望我能为您提供多个"停止使用一个开发平台和一个不同的部署平台"的upvote,应该有一个Markdown宏.我想如果您的开发适配器不是PostgreSQL,Heroku应检查您的`database.yml`并尖叫. (3认同)
  • @mu太短了:嗯,我希望你能给我一个以上的upvote.:-) (2认同)