【发布时间】:2019-07-24 08:13:15
【问题描述】:
我的 Rails 应用中有一个查询,看起来像这样。本质上,我想获取昨天上午 9:30 到今天上午 9:30 之间创建的记录。我打算在每天运行一次的任务中使用此查询。
last_execution_time = Time.zone.parse("#{Time.zone.yesterday.strftime('%Y-%m-%d')} 09:30:00}")
this_execution_time = Time.zone.parse("#{Time.zone.today.strftime('%Y-%m-%d')} 09:30:00}")
new_cat_records = Cat.where(created_at: last_execution_time..this_execution_time)
但是,我担心在上午 9:30:00 创建的记录会发生什么情况。如果我今天和明天运行此查询,是否两次都包含在内?
我知道 PostgreSQL 的 BETWEEN 包括范围边界(docs):
BETWEEN 谓词简化了范围测试:
a BETWEEN x AND y等价于
a >= x AND a <= y请注意,BETWEEN 将端点值视为包含在范围内。
如果上面的代码可能会导致重复,我该如何避免这种情况?
- 我应该把
this_execution_time的时间改成9:29:59吗? - 还是需要考虑更精细的因素,例如毫秒?
[编辑]我使用rails 5.2.3和pg 1.1.4。
【问题讨论】:
-
您可以编写一个查询,其中 last_execution_time > 9:30(昨天)和 this_execution_time
标签: ruby-on-rails postgresql between