查询 date_time 字段的日期部分。 yyyy-mm-dd

Query for date part of date_time field. yyyy-mm-dd

我正在尝试查找是否有来自同一日期的 post。

@selected_date = Date.new(params["post"]["date(1i)"].to_i,params["post"]["date(2i)"].to_i,params["post"]["date(3i)"].to_i)

@existing_post = Post.where(user_id: current_user.id, date: @selected_date).first

我的 @selected_date 仅包含日期 2021-03-19,但我的日期数据库字段也包含时间 date: "2021-03-19 17:43:50.640258000 +0000"

在查询中如何只指向日期部分进行比较?当我这样做时 , date: @selected_date) 它试图在没有时间的情况下进行比较,所以它失败了。

至少有两种方法:

  1. 支持数据库类型,并进行相应查询:
@existing_post = Post.where(
 user_id: current_user.id, 
 date: @selected_date.beginning_of_day..@selected_date.end_of_day # use @selected_date.all_day from Eyeslanduc's answer: 
).first

这将查询当天 00:00:00 和 23:59:59

之间具有 date 的条目
  1. date栏,好像真的是时间戳:
@existing_post = Post
  .where(user_id: current_user.id) 
  .where("date_trunc('day', date)::date = ?", @selected_date).first

可能 .where("date::date = ?", @selected_date) 也一样。

这会将 date 列转换为 date 类型,这应该可以满足您的需求。

您可以使用 all_day 助手执行此操作,该助手会创建一个涵盖全天的范围。

Post.find_by(user_id: current_user.id, date: @selected_date.all_day)