Postgresql使用日期间隔和SELECT语句

时间:2015-04-20 20:34:26

标签: sql postgresql intervals

我有一个包含3列的表 - 时间戳,真实和字符串。 String列包含各种时间频率值(如Minutes,Hours,Days)。我想在我的timestamp列中取值,并在其他列中添加值。例如,我喜欢做类似

的事情
select timestamp '2015-04-20 01:00' + interval '2 hours'

如果我有一个包含以下列和值的表

action_start_time   rate  frequency
2015-04-20 01:00    2     hours

3 个答案:

答案 0 :(得分:2)

简单地:

SELECT action_start_time + rate * ('1'|| frequency)::interval

所有技巧都是使用某个区间值的乘法运算:

postgres=# select 3 * interval '1 hour';
┌──────────┐
│ ?column? │
╞══════════╡
│ 03:00:00 │
└──────────┘
(1 row)

您可以简单地创建任何间隔值,而无需使用字符串进行操作。当然,如果您的列frequency是本机PostgreSQL interval类型,那么应该会更好。

答案 1 :(得分:1)

select action_start_time + (rate::varchar||' '||frequency)::interval

从action_start_time开始,然后获取速率(强制转换为角色)并附加一个空格然后频率以获得类似“1小时”或“3天”等字符串。然后将该字符串转换为间隔将其添加到原始action_start_time

答案 2 :(得分:1)

您可以使用以下查询将ratefrequency列转换为 区间

select format('%s %s',rate,frequency)::interval
from actions 

然后只需添加action_start_time 列的间隔

即可获得确切的时间戳
select action_start_time + format('%s %s',rate,frequency)::interval my_timestamp
from actions 

demo-sqlfiddle