在几小时之间检索记录

时间:2017-03-03 17:26:01

标签: sql ruby-on-rails postgresql activerecord

我有以下模型(我在轨道上使用ruby):

  # MealSetting model
  # week_day:integer
  # pick_up_start_time:datetime
  # pick_up_end_time:datetime

我想要检索在特定时间内可用的所有餐点,如果pick_up_start_time <= current_hourpick_up_end_time >= current_hourpick_up_start_time:datetime

pick_up_end_time:datetimeMealSetting .where('pick_up_start_time::time <= ? and pick_up_end_time::time >= ?', Time.now.utc.strftime("%T"), Time.now.utc.strftime("%T")) 实际上是日期,但我只使用小时数。

我有这个查询,

{{1}}

但它不起作用,因为数据库中的日期存储在utc中。

2 个答案:

答案 0 :(得分:0)

您可以使用纯SQL并使用now()方法。 由于您想要比较日期内的小时数,您可以使用postgres的date_part功能。

MealSetting.where("date_part('hour', NOW()) BETWEEN date_part('hour', pick_up_start_time) AND date_part('hour', pick_up_end_time)")

答案 1 :(得分:0)

我认为这是范围的完美用例

class MealSettings < ApplicationRecord

  scope :ready_for_pickup,   -> { where("hour(pick_up_start_time) <= ?", Time.now.utc.hour) }
  scope :before_pickup_ends, -> { where("hour(pick_up_end_time) >= ?", Time.now.utc.hour) }

end

MealSettings.ready_for_pickup.before_pickup_ends