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
您可以使用以下查询将 rate
和 frequency
列转换为 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
我有一个包含 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
您可以使用以下查询将 rate
和 frequency
列转换为 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