查询忽略时间戳日期的时间范围

use*_*516 5 ruby sql postgresql ruby-on-rails rails-activerecord

我正在尝试查询我的rails数据库(Postgres)中的购买表,我想查询时间范围.

例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买.

created_at此表中有一列,但我没有看到如何在不搜索特定日期的情况下完成此操作.

我试过了:

Purchases.where("created_at BETWEEN ? and ?", Time.now - 1.hour, Time.now)

但这最终只会在那些时候搜索今天的日期.

Phi*_*rom 6

您需要使用PostgreSQL的date_part/extract函数从created_at中提取小时部分.

SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 20
Run Code Online (Sandbox Code Playgroud)

例如,像这样:

Purchases.where(["EXTRACT(HOUR FROM created_at) BETWEEN ? AND ?", 13, 14])
Run Code Online (Sandbox Code Playgroud)

  • +1好的答案,另外要考虑的是时区.用户可能希望答案与他们自己的时区相对应. (5认同)