如何使用postgresql将时间间隔转换为时区?

时间:2013-10-04 14:34:28

标签: postgresql type-conversion postgresql-9.2

我想执行这个简单的查询:

SELECT
    pid,
    MIN(interval '5 minutes' - current_timestamp - state_change)
FROM
    pg_stat_activity
AND
    current_timestamp - state_change <= interval '5 minutes'
GROUP BY 
    pid
ORDER BY
    2 ASC
LIMIT 1;

但PG抱怨intervaltimestamp with time zone之间没有运算符。

如何将我的间隔转换为时间戳?

1 个答案:

答案 0 :(得分:3)

不可能转换不是问题,这是评估顺序的问题。在不改变参数顺序的情况下,您可以用括号写下它:

interval '5 minutes' - (current_timestamp - state_change)

它可以使用,因为支持interval - interval。没有括号,它不起作用,因为interval - timestamp将首先被评估,而且没有实现。

作为旁注,由于pid中的pg_stat_activity是唯一的,GROUP BY pidMIN应该被取消,如:

SELECT
    pid,
    interval '5 minutes' - (current_timestamp - state_change)
FROM
    pg_stat_activity
WHERE
    current_timestamp - state_change <= interval '5 minutes'