繁体   English   中英

以偶数小时而不是奇数小时获得时间序列

[英]get time series in even numbers of hours instead of odd numbers of hours

我正在使用以下查询生成一个时间序列。

SELECT date_trunc('hour', dd):: TIMESTAMP WITHOUT TIME zone as time_ent
FROM generate_series ( '2021-12-02 11:49:26'::timestamp 
                     , '2021-12-09 11:49:26'::timestamp
                     , '120 min'::interval) dd

它会给我 output 如下所示。

2021-12-02 11:00:00.000
2021-12-02 13:00:00.000
2021-12-02 15:00:00.000
2021-12-02 17:00:00.000
2021-12-02 19:00:00.000

但我需要 output 之类的。

2021-12-02 12:00:00.000
2021-12-02 14:00:00.000
2021-12-02 16:00:00.000
2021-12-02 18:00:00.000
2021-12-02 20:00:00.000

目前,时间序列小时数取决于我通过的时间戳。 在上面它给了我像 11,13,15 这样的奇数小时......但我希望在任何情况下像 12,14,16 这样的偶数小时......它不应该取决于我在查询中传递的时间' 2021-12-02 11:49:26'::timestamp, '2021-12-09 11:49:26'::timestamp

这是根据 Tilen 的评论的解决方案。

SELECT date_trunc('hour', dd):: TIMESTAMP WITHOUT TIME zone as time_ent
FROM generate_series (
        CASE
            WHEN MOD(EXTRACT(HOUR FROM '2021-12-02 11:49:26'::timestamp)::INT, 2) = 0 THEN
                '2021-12-02 11:49:26'::timestamp
            ELSE
                '2021-12-02 11:49:26'::timestamp + INTERVAL '1 hour'
        END
        , '2021-12-09 11:49:26'::timestamp
        , '120 min'::INTERVAL
    ) dd
SELECT date_trunc('hour', dd):: TIMESTAMP WITHOUT TIME zone as time_ent
FROM generate_series ( timestamp '2021-12-02 11:49:26' + ((DATE_PART('hour', timestamp '2021-12-02 11:49:26')::integer % 2) || ' hours') :: INTERVAL
                     , '2021-12-03 11:49:26'::timestamp
                     , '120 min'::interval) dd

https://dbfiddle.uk/?rdbms=postgres_12&fiddle=6b220fdb1d30c10ca17e8ce07333f5ce

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM