我有一个表(称为time_table),其中有一个名为" time"的列。此列具有以下格式的时间戳: 2017-07-31 09:08:42
换句话说: YYYY-MM-DD HH:MM:SS
我想将所有这些时间戳划分为五分钟。所以,例如,09:00:00是一个间隔,09:05:00是另一个。因此,上面的例子将放在2017-07-31 09:05:00区间。
我这样做的计划如下:
示例:
2017-07-31 09:08:42在纪元是1501492122。
1501492122%300 = 222
1501492122 - 222 = 1501491900
1501491900转换为2017-07-31 09:05:00那是我的间隔。
我试图在PostgreSQL中这样做。我认为创建一个函数是最简单的。第一步可以用
计算select extract('epoch' from time) from time_table
这将时间戳正确地转换为时代。但是我把所有东西都放在一个功能上有问题。现在我已经实现了以下内容:
create or replace function stamp_to_epoch() returns table (epoch_mod integer) as $$
declare
epoch integer;
epoch_mod integer;
begin
select extract('epoch' from time) from time_table into epoch;
select (epoch % 300) into epoch_mod;
return query select (epoch - epoch_mod);
end;
$$ language plpgsql;
返回
stamp_to_epoch
----------------
1501491900
(1 row)
哪个是正确的,但不适用于所有行。换句话说,即使我有多个具有不同时间戳的行以显着不同的间隔,它也只返回一行。我的想法是函数计算第一个时间戳的纪元间隔,因此我只得到一个结果。我该如何确保函数为每一行计算这个?
我发现很难理解documentation这可能就是我遇到这个问题的原因。我已经搜索过,但认为很难找到我正在寻找的东西。
修改 我被要求包括表输入和预期输出。
表输入(table:time_table):
time
----------------------
2017-05-09 05:08:42
2017-05-10 05:16:24
2017-07-31 09:08:42
预期产出:
time
----------------------
2017-05-09 05:05:00
2017-05-10 05:15:00
2017-07-31 09:05:00
答案 0 :(得分:1)
它没有回答这个问题,但是遵循代码逻辑,你可以
select extract('epoch' from time) - (extract('epoch' from time) % 300)
from time_table
完全没有任何功能