Postgresql 使用日期间隔和 SELECT 语句

Postgresql using date interval and SELECT statement

我有一个包含 3 列的 table - 一个时间戳、一个实数和一个字符串。字符串列包含各种时间频率值(如分钟、小时、天)。我想获取我的时间戳列中的值并将其他列中的值添加到它。例如,我想做类似

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

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

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

简单地说:

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

所有技巧都在于使用某个区间值的乘法:

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

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

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

从 action_start_time 开始,然后获取速率(转换为一个字符)并附加一个 space,然后是频率以获得一个字符串,如“1 小时”或“3 天”等.. 然后将该字符串转换为一个间隔并将其添加到原始 action_start_time

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

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