table 中所有行的 PostgreSQL 函数
PostgreSQL function for all rows in table
我有一个 table(称为 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 区间内。
我的计划如下:
- 将时间戳转换为纪元时间
- 计算纪元 % 300
- 从纪元中减去(纪元 % 300)
示例:
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;
这个returns
stamp_to_epoch
----------------
1501491900
(1 row)
这是正确的,但不是对所有行。换句话说,它只有 returns 一行,即使我有多行具有明显不同的时间戳的不同时间间隔。我的想法是该函数计算第一个时间戳的纪元间隔,因此我只得到一个结果。我应该如何确保函数对每一行都进行计算?
我发现很难理解 documentation 这可能就是我遇到这个问题的原因。我已经搜索过了,但我认为很难准确地搜索到我要找的东西。
编辑:
我被要求包括 table 输入和预期输出。
Table 输入 (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
它没有回答问题,但是按照代码逻辑,你可以
select extract('epoch' from time) - (extract('epoch' from time) % 300)
from time_table
完全没有功能
我有一个 table(称为 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 区间内。
我的计划如下:
- 将时间戳转换为纪元时间
- 计算纪元 % 300
- 从纪元中减去(纪元 % 300)
示例:
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;
这个returns
stamp_to_epoch
----------------
1501491900
(1 row)
这是正确的,但不是对所有行。换句话说,它只有 returns 一行,即使我有多行具有明显不同的时间戳的不同时间间隔。我的想法是该函数计算第一个时间戳的纪元间隔,因此我只得到一个结果。我应该如何确保函数对每一行都进行计算?
我发现很难理解 documentation 这可能就是我遇到这个问题的原因。我已经搜索过了,但我认为很难准确地搜索到我要找的东西。
编辑: 我被要求包括 table 输入和预期输出。
Table 输入 (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
它没有回答问题,但是按照代码逻辑,你可以
select extract('epoch' from time) - (extract('epoch' from time) % 300)
from time_table
完全没有功能