【问题标题】:Rails Query Table for all records that were created between a certain time of all daysRails 查询表,用于在所有日期的某个时间之间创建的所有记录
【发布时间】:2018-11-28 07:50:50
【问题描述】:

我有一个带有 PGSQL 数据库的 rails 应用程序,它允许用户添加帖子。 出于分析目的,我需要查询在每天下午 2 点到 4 点之间创建的记录并显示该计数。

我可以获得所有结果并对其进行迭代,但我认为这不是一种有效的处理方式,因为我预计每天会有 1000 条记录。

【问题讨论】:

  • 每当询问一些非标准查询时,请包括您正在使用的数据库,因为这些查询往往会成为特定于数据库的查询
  • 它的 PGSql 数据库,不好编辑并在帖子中提及它
  • 其实,我重读了你的问题,不得不同意@sawa。您是要获取每天的计数还是所有天的计数。

标签: ruby-on-rails postgresql ruby-on-rails-5


【解决方案1】:

为此使用 PostgreSQL 的 EXTRACT。更多日期时间函数可以参考here

您的查询应如下所示:

Post.where("EXTRACT(hour FROM created_at) BETWEEN 14 AND 16")

如果您只对计数感兴趣,请添加 .count

请记住时区,如果您在数据库中以 UTC 格式保存日期时间,但您正在寻找本地时区 14-16 之间的帖子,则必须稍微改变时间(或使用 @987654325 @来自我提到的考虑夏令时的链接)。

【讨论】:

    【解决方案2】:
    class Post < ApplicationRecord
      scope :todays_latest_posts, { where("(HOUR(created_at) BETWEEN ? AND ?) AND DATE(created_at) = ?", 14, 16, Date.today) }
    end
    

    查询在每天下午 2 点到 4 点之间创建并显示的记录 =>

    Post.todays_latest_posts

    Sql 查询会

    SELECT  `posts`.* FROM `posts` WHERE ((HOUR(created_at) BETWEEN 14 AND 16) AND DATE(created_at) = '2018-11-24') LIMIT 11
    

    输出 =>

    => #<ActiveRecord::Relation [#<post id: 112, title: nil, .... created_at: "2018-11-24 11:31:35", updated_at: "2018-11-24 11:31:36">, [], ...]>
    

    计数 =>

    Post.todays_latest_posts.count
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2012-02-08
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多