Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询日期\时间字段的日期部分。日期格式_Sql_Ruby On Rails_Date_Ruby On Rails 6 - Fatal编程技术网

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)
时,它试图在没有时间的情况下进行比较,因此它失败了。

至少有两种方法:

  • 尊重DB类型,并相应地查询:
  • @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就是这样,有太多的方法,很难知道或找到适合您需要的方法。