ruby-on-rails RailsActiveRecord-按日期选择所有对象,只使用日、月、年,但忽略日期的其余部分

yhuiod9q  于 2023-11-20  发布在  Ruby
关注(0)|答案(2)|浏览(104)

我有一个名为Event的模型。我希望能够获得在某个特定日期创建的所有事件,这些事件应该是这样的
Event.where(created_at: "20/01/2019".to_date)
问题是created_at字段还包含分钟,秒等,我想忽略。我只想按天,月和年比较日期。有什么方法可以实现吗?

w1jd8yoj

w1jd8yoj1#

您可以使用ActiveSupport核心扩展提供的Date#beginning_of_dayDate.end_of_day

d = '2019-01-20'.to_date 
Event.where(created_at:(d.beginning_of_day..d.end_of_day))

字符串
这并不一定会比较“.
你可以用

Event.where(
  Arel::Nodes::NamedFunction.new('CAST',
     [Event.arel_table[:created_at].as('DATE')]
  ).eq(d)
)


如果你真的只想比较日,月和年。
选项1将导致

events.created_at BETWEEN '2019-01-20 00:00:00' AND '2019-01-20 23:59:59'


选项2将导致

CAST(events.created_at AS DATE) = '2019-01-20'

cig3rfwq

cig3rfwq2#

Event.where(created_at: d.to_time.all_day)

字符串

相关问题