Эквивалент DATEADD в PostgreSQL

Есть ли эквивалент этой команды T-SQL в PostgreSQL?

select dateadd(hh,duration_in_hours,start_date) as end_date

Я нашел только ключевое слово interval с последующей строкой, но эта ужасная конструкция возвращает синтаксическую ошибку:

select start_date + interval cast(duration_in_hours as varchar) || ' hours'

Он допускает только строковую константу после ключевого слова «интервал». Я уверен, что в pgsql должна быть какая-то подобная функция, но я не могу ее найти.


person Hink    schedule 22.11.2014    source источник
comment
Правда, это то же самое. Я не смог найти его по моим ключевым словам.   -  person Hink    schedule 24.11.2014
comment
На самом деле INTERVAL — это тип, поэтому вы можете привести строку как таковую. Ваше утверждение можно было бы переписать как select start_date + cast(duration_in_hours || ' hours' as INTERVAL); Я разозлился и завернул все это в простую функцию: create or replace function dateadd(date,float,char) returns date as $$ begin return $1 + cast($2||' '||$3 as interval); end; $$ language plpgsql;. Извините за интервал.   -  person Manngo    schedule 13.03.2016
comment
Вы можете попробовать UDF. Я написал один здесь. gist.github.com/danielleevandenbosch/   -  person Daniel L. VanDenBosch    schedule 20.08.2018


Ответы (1)


Вы можете сделать это следующим образом:

select start_date + (duration_in_hours * interval '1 hour') from your_table

См. этот пример скрипта SQL.

person jpw    schedule 22.11.2014
comment
что, если продолжительность_in_hours равна нулю? можешь сделать как duration_in_hours ? duration_in_hours: 1 - person user151496; 07.04.2020
comment
@user151496, затем COALESCE(duration_in_hours, 1) - person François Leblanc; 18.03.2021