Добавление ‹целых› секунд к ‹отметке времени› в PostgreSQL

У меня есть таблица элементов со следующими столбцами:

  • start_time столбец (timestamp without time zone)
  • expiration_time_seconds столбец (integer)

Например, некоторые значения:

SELECT start_time, expiration_time_seconds 
   FROM whatever 
       ORDER BY start_time;

         start_time         | expiration_time_seconds
----------------------------+-------------------------
 2014-08-05 08:23:32.428452 |                  172800
 2014-08-10 09:49:51.082456 |                    3600
 2014-08-13 13:03:56.980073 |                    3600
 2014-08-21 06:31:38.596451 |                    3600
 ...

Как добавить время истечения срока действия, указанное в секундах, к start_time?

Я попытался отформатировать строку временного интервала для команды interval, но не смог:

blah=> SELECT interval concat(to_char(3600, '9999'), ' seconds');
ERROR:  syntax error at or near "("
LINE 1: SELECT interval concat(to_char(3600, '9999'), ' seconds');

person Adam Matan    schedule 15.02.2015    source источник


Ответы (1)


хитрость состоит в том, чтобы создать фиксированный интервал и умножить его с количеством секунд в столбце:

SELECT start_time, 
       expiration_time_seconds, 
       start_time + expiration_time_seconds * interval '1 second'
FROM whatever 
ORDER BY start_time;

        start_time          | expiration_time_seconds |          end_time
----------------------------|-------------------------|----------------------------
 2014-08-05 08:23:32.428452 |                  172800 | 2014-08-07 08:23:32.428452
 2014-08-10 09:49:51.082456 |                    3600 | 2014-08-10 10:49:51.082456
 2014-08-13 13:03:56.980073 |                    3600 | 2014-08-13 14:03:56.980073
 2014-08-21 06:31:38.596451 |                    3600 | 2014-08-21 07:31:38.596451
person Adam Matan    schedule 15.02.2015
comment
Большое спасибо! Можете ли вы добавить пробел к start_time + expiration_time_seconds, чтобы его было легче визуализировать? - person bonafernando; 11.10.2019