postgresql计算日期不同进入查询

fslejnso  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(316)

试着为每个条目写查询,如果n小时应该存档( auto_archive_h 在表中)未更新。将项目标记为存档需要集 archivedTURE 以及 archived_at 直到现在。但如果 auto_archive_hNULL 或者 updated_atNULL 在查询中不涉及,只是通过。
星期六和星期天不算存档时间。
我有个问题 WHERE 条件。如何计算小时数差异并与 auto_archive_h ?
表格:

CREATE TABLE items
(
    id             BIGSERIAL PRIMARY KEY,
    updated_at     TIMESTAMP,
    auto_archive_h INT,
    archived       BOOLEAN        NOT NULL DEFAULT FALSE,
    archived_at    TIMESTAMP
);

查询:

UPDATE items
SET archived = TRUE, archived_at = now()
WHERE ?issue_here?

就像 to_hours(now() - updated_at) > auto_archive_h 但是使用wrire语法。
帮我完成查询。谢谢您。

4xrmg8kj

4xrmg8kj1#

也许使用自定义函数最简单:

CREATE FUNCTION ago_excl_weekend(
   p_hours integer
) RETURNS timestamp
   LANGUAGE sql AS
$$SELECT localtimestamp - make_interval(hours => p_hours) -
       (extract(week FROM localtimestamp) -
        extract(week FROM localtimestamp -
                          make_interval(
                             hours => p_hours + p_hours / 168 * 48
                          )
               )
       )
     * INTERVAL '48' HOUR$$;

那么情况就是

WHERE updated_at <= ago_excl_weekend(auto_archive_h)

相关问题