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