ruby-on-rails - Rails - 按小时排序

标签 ruby-on-rails postgresql datetime sqlite heroku

@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/

相关文章:

ruby-on-rails - 如何从谷歌计算引擎连接到 Rails 控制台

ruby-on-rails - 完成后如何在循环内检查状态的结果?

sql - 查找他们演过的 Actor 和电影的列表,如果他们没有演过,则使电影标题为空

javascript - 如何使用 javascript 将毫秒转换为 "hhmmss"格式?

具有图像上传功能的 Javascript(或可能不是)文本编辑器

ruby-on-rails - Rails,模型中的查找器(使用收集)或 Controller 中的查找器(迭代和使用推送)。哪个更有效?

sql - PostgreSQL 外键约束违反继承

sql - 删除约束时出现错误消息

Java LocalDateTime与mybatis的转换

python - 如何防止 pandas.to_datetime() 函数将 0001-01-01 转换为 2001-01-01