选择不同的日期时间

时间:2016-03-10 13:16:51

标签: sql ruby-on-rails

我目前正在学习如何使用带有The Odin Project的Ruby on Rails,现在我正在处理制作表单。我试图从我的数据库中提取唯一日期以填充项目的下拉选项框。我在我的视图中使用form_for并使用select函数,该函数采用数组数组,即[["选项1",1],[&# 34;选项二",2]]等。这个想法是只有数据库中的唯一日期才会显示在选项中。我的问题是重复日期不断出现,例如。

03/03/2016
03/03/2016
04/03/2016
05/03/2016
06/03/2016
06/03/2016

使用find_by_sql我试过

SELECT DISTINCT start FROM flights

无济于事。快速谷歌搜索后我尝试了

SELECT start FROM flights GROUP BY start

但我仍然有重复。我对SQL不是最好的,所以任何帮助都会受到赞赏。

编辑:

我的datatime列确实有一个时间组件,因此可能是问题

如果有任何帮助,请从db模式下面找到我的航班表

create_table "flights", force: :cascade do |t|
  t.integer  "from_airport_id"
  t.integer  "to_airport_id"
  t.datetime "start"
  t.integer  "flight_duration"
  t.datetime "created_at",      null: false
  t.datetime "updated_at",      null: false
end

2 个答案:

答案 0 :(得分:0)

如果选择不同的日期仍然是重复日期,则日期格式很可能有时间,日期的时间也不同。

您应该将列开始日期CAST(start AS DATE)转换为将列转换为日期,然后才使用group by。

答案 1 :(得分:0)

经过一些在线搜索后,我发现了一种更容易获得我想要的结果的方法。使用:pluck方法作为快捷方式从数据库中提取我想要的属性,在日期时间调用:to_date以删除时间组件,然后调用:uniq以获得唯一像我要求的日期。

Flight.pluck(:start).map {|a| [a.strftime("%d/%m/%Y"), a.to_date]}.uniq