首页 > 解决方案 > 如何使用 postgres 从 ruby​​ 查询中删除周末

问题描述

所以我有这个查询,在那里我找到了超过商家阈值的包裹。我的问题是我不想将周末包括在内。因此,如果我的包裹是在星期五创建的,并且阈值为 2 天。当我在星期一检查它时,这个查询将返回包裹,因为它也计算周末。有没有办法可以排除周末?

Package.joins(:merchant).where(
  "packages.created_at + interval '1 day' * merchants.threshold < ?",Time.zone.now
)

我试过了

Package.joins(:merchant).where(
  "packages.created_at + interval '1 day' * merchants.threshold < ?",Time.zone.now
).where("extract(dow from packages.created_at) not in (6,0)")

但它不起作用。

有没有一种方法可以让查询只计算周一、周二、周三、周四、周五、周一等工作日,而不是周一、周二、周三、周四、周五、周六、周日和周一

标签: ruby-on-railsrubypostgresql

解决方案


您可以通过EXTRACT(ISODOW FROM *)函数排除周末:

Package
  .joins(:merchant)
  .select("*, packages.created_at + interval '1 day' * merchants.threshold AS datetime")
  .where("EXTRACT(ISODOW FROM datetime) NOT IN (6, 7) AND datetime < ?", Time.zone.now)

推荐阅读