如何在PostgreSQL中生成时间序列?


Answers:


14

要优化:

SELECT x::time
FROM   generate_series(timestamp '2000-01-01 00:00'
                     , timestamp '2000-01-02 00:00'
                     , interval  '5 min') t(x);

日期是无关紧要的,因此请使用任意时间戳常量。演员time非常便宜。
这包括下限和上限,因此我们得到了'00:00' 两倍。使用'2000-01-01 23:59'作为上限仅一次得到它。

有关:


我发现有关任意日期的信息非常难看。但是,我认为这实际上也会更快更好。
埃文·卡罗尔

由于日期无关紧要,因此它可能是任意的。这是最快的方法。
Erwin Brandstetter

7

不确定这是否是最好的方法,但是我们可以使用generate_series生成最小偏移量00:00:00,然后简单地调用make_interval(mins=>)从中获取间隔。

SELECT make_interval(mins=>x)::time
FROM generate_series(0, 60*24-5, 5) AS t(x);

5

我喜欢@EvanCarroll的方式,但还有另一个选择-

select  x::time
from    generate_series 
            (current_date,current_date + '1 day - 1 second'::interval,'5 minute') as t(x);

这有时仅在某些地方有效。它受DST干扰。有关更多信息,请参见此处
埃文·卡罗尔

3

另一种方式:

SELECT '00:00:00'::time + x * '1 minute'::interval
FROM generate_series(0, 60*24, 5) AS t(x);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.