【问题标题】:Not counting weekend days in an interval不计算间隔的周末天数
【发布时间】:2021-08-05 16:12:34
【问题描述】:

我想获得一个时间戳,该时间戳在另一个时间戳之前 X 周天

我只能到达另一个时间戳之前 X 的时间戳:

select item.timestamp - (X * interval '1' day)

如何将此查询升级为不计算周末天数?

【问题讨论】:

  • 我们不知道您的企业遵守什么时间表。你在某个地方有日历表吗?如果有,结构是什么?因不可抗力而关闭的日子怎么办?
  • @jjanes 我已将问题升级为工作日而不是工作日。这有帮助吗?

标签: postgresql timestamp


【解决方案1】:

您可能希望每 5 天减去 7 天,加上剩余的天数(除以 5 后),如果剩余的减去会让您回到/度过一个周末,则再减去两天。所以是这样的:

create or replace function minus_weekdays(timestamptz, int) returns timestamptz language sql as $$ 
   select $1 - interval '1 day' * case 
      when extract(DOW from $1+interval '1 day') <= ($2%5)+1 
      then 7*($2/5)+($2%5)+2 
      else 7*($2/5)+($2%5) end; 
$$;

如果在已经是周末的日期调用这可能会做错事,但我不知道在这种情况下你想要做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2020-08-21
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多