Sql 查询日期\时间字段的日期部分。日期格式
我想知道是否有来自同一日期的帖子Sql 查询日期\时间字段的日期部分。日期格式,sql,ruby-on-rails,date,ruby-on-rails-6,Sql,Ruby On Rails,Date,Ruby On Rails 6,我想知道是否有来自同一日期的帖子 @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
@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
My@selected_date
仅包含日期2021-03-19,但My date db字段也包含时间日期:“2021-03-19 17:43:50.640258000+0000”
在查询中,如何仅指向要比较的日期部分?当我执行
,date:@selected_date)
时,它试图在没有时间的情况下进行比较,因此它失败了。至少有两种方法:
@existing_post=post.where(
用户标识:当前用户标识,
日期:@selected_date.start_of_day..@selected_date.end_of_day#使用@selected_date.all_day来自Eyeslanduc的答案:https://stackoverflow.com/a/66787291/299774
).首先
这将查询日期介于00:00:00和23:59:59之间的条目
铸造date
列,这似乎真的是一个时间戳:
@existing_post=post
.where(用户标识:当前用户标识)
.where(“date\u trunc('day',date)::date=?,@所选日期)。首先
可能是。其中(“date::date=?”,@selected\u date)
也会起同样的作用
这会将date
列强制转换为date
类型,这将为您提供所需的内容。您可以使用帮助器执行此操作,帮助器将创建一个覆盖全天的范围
Post.find_by(用户标识:current_user.id,日期:@selected_date.all_day)
太棒了!这管用!我不知道有这样的方法!RubyonRails就是这样,有太多的方法,很难知道或找到适合您需要的方法。