Как объявить переменную INTERVAL в postgresql? - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу написать код от TIMESTAMP_START до TIMESTAMP_END с переменной INTERVAL.Мой жестко закодированный рабочий код выглядит так:

LOOP 
    ...DO SMTH...

    TIMESTAMP_START := (TIMESTAMP_START + INTERVAL '30' MINUTE);
    EXIT WHEN TIMESTAMP_START > TIMESTAMP_END;
END LOOP; 

Когда я пытаюсь заменить тип интервала, я получаю синтаксическую ошибку:

DECLARE INCREMENT_TYPE  INTERVAL := minute;
...
TIMESTAMP_START := (TIMESTAMP_START + INTERVAL '30' INCREMENT_TYPE);

То же самое происходит, когда я пытаюсь изменитьшаг:

DECLARE STEP    text    := '30'; 
...
TIMESTAMP_START := (TIMESTAMP_START + INTERVAL STEP MINUTE);

Я предполагаю, что я делаю что-то не так, но поиск в документации не дает мне ответа.Как правильно решить эту проблему?

1 Ответ

0 голосов
/ 07 декабря 2018

Переменная может содержать только полное значение базового типа данных.Вы не можете хранить только 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);
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...