【问题标题】:Postgres: Don't run a query if current time is in rangePostgres:如果当前时间在范围内,则不要运行查询
【发布时间】:2017-05-19 16:33:25
【问题描述】:

如果查询返回任何数据,我有一个查询需要每小时运行一次以发送警报。为避免在非工作时间收到更改,如果当前时间在美国东部标准时间上午 12 点到上午 7 点之间,我不希望运行此查询。

以下是 SQL 在其当前状态下的样子:

SELECT * FROM (
    SELECT FLOOR(EXTRACT(EPOCH FROM (now() - updated_at))/60) :: INT as minutes_since_update
    FROM table_a
        WHERE column_a IS TRUE AND column_b IS NULL
    LIMIT 1) a
WHERE minutes_since_update > 60

如何更改此查询,使其不会在非工作时间运行。

我试过这个,但我不清楚为什么它不起作用。

SELECT * FROM (
    IF (SELECT CURRENT_TIME BETWEEN '04:00:00' AND '11:00:00') THEN
        SELECT 0 as minutes_since_update FROM table_a where true = false;
    ELSE
        SELECT FLOOR(EXTRACT(EPOCH FROM (now() - updated_at))/60) :: INT as minutes_since_update
        FROM table_a
            WHERE column_a IS TRUE AND column_b IS NULL
        LIMIT 1;
    END IF;
) a
WHERE minutes_since_update > 60

【问题讨论】:

  • 为什么不将其添加到 WHERE 子句中?

标签: sql postgresql postgresql-9.5


【解决方案1】:

只需将子句放在 WHERE 条件中即可。

SELECT FLOOR(EXTRACT(EPOCH FROM (now() - updated_at))/60) :: INT as minutes_since_update
FROM table_a
WHERE column_a IS TRUE AND column_b IS NULL
AND CURRENT_TIME BETWEEN '00:00:00' AND '07:00:00'
LIMIT 1;

但是,我可能会使用类似pg_cron

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多