Переменная может содержать только полное значение базового типа данных.Вы не можете хранить только 2018
в переменной timestamp.
В зависимости от того, как вы хотите его использовать, и насколько гибким он должен быть, я вижу следующие возможности:
declare
increment_value interval := interval '30' minute;
begin
...
timestamp_start := (timestamp_start + increment_value);
...
Было бы полезно, если вы хотите определить значение приращения только один раз.
Если вы хотите использовать разные длины интервалов во всей функции, вы можете определить интервал стандартной длины и затем умножить его на:
declare
one_minute_interval interval := interval '1' minute;
one_hour_interval interval := interval '1' hour;
begin
...
timestamp_start := (timestamp_start + 30 * one_minute_interval);
...
timestamp_start := (timestamp_start + 5 * one_hour_interval);
Или решениеэто ближе к тому, что вы пытаетесь сделать:
declare
increment_type text := 'minute';
begin
...
timestamp_start := (timestamp_start + ('30 '||increment_type)::interval);
...