查询 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)
它试图在没有时间的情况下进行比较,所以它失败了。
至少有两种方法:
- 支持数据库类型,并进行相应查询:
@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
的条目
- 投
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)
我正在尝试查找是否有来自同一日期的 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)
它试图在没有时间的情况下进行比较,所以它失败了。
至少有两种方法:
- 支持数据库类型,并进行相应查询:
@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
的条目
- 投
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)