我正在尝试创建一个显示下半小时时间的函数。
所以当当前时间是13:40时,我希望它显示14:00而不是13:30。
我所创造的,完成了工作,但在最近的半小时内,而不是在最近的未来:

CREATE OR REPLACE FUNCTION round_timestamp(
         ts timestamptz
         ,round_secs int
        ) RETURNS timestamptz AS $$
        DECLARE
                _mystamp timestamp;
                _round_secs decimal;
        BEGIN
    _round_secs := round_secs::decimal;
    _mystamp := timestamptz 'epoch'
            + ROUND((EXTRACT(EPOCH FROM ts))::int / _round_secs) * _round_secs
            * INTERVAL '1 second';
    RETURN _mystamp;
END; $$ LANGUAGE plpgsql IMMUTABLE;

有什么办法可以让它显示最近半小时的未来?

最佳答案

简单地说,在向下舍入的epoch中添加1,然后再将其缩放为时间戳:

CREATE OR REPLACE FUNCTION round_timestamp(ts timestamptz, round_secs int)
    RETURNS timestamptz AS $$
BEGIN
    RETURN timestamptz 'epoch'
            + (ROUND((EXTRACT(EPOCH FROM ts))::int / round_secs) + 1) * round_secs
            * INTERVAL '1 second';
END; $$ LANGUAGE plpgsql IMMUTABLE;

不需要局部变量。

08-06 23:41