Část problému spočívá v tom, že standardní SQL výraz pro intervaly uvádí číslo, ale ne klíčová slova. Takže musíte být opatrní.
select current_date, current_date + interval '2' day;
--
2012-02-21 2012-02-23 00:00:00
V PostgreSQL také fungují citace jako '2 dny' a '2 dny'. Takže si možná myslíte, že '2' || „dny“ by bylo ekvivalentní, ale není.
select current_date, current_date + interval '2' || ' days';
--
2012-02-21 2012-02-21 00:00:02 days
Řešením, jak řekl A.H., je přetypovat výsledný řetězec jako interval.
Můžete také použít proměnnou místo 2. Tím se vygeneruje kalendář na rok 2012.
-- 0 to 365 is 366 days; 2012 is a leap year.
select ('2012-01-01'::date + (n || ' days')::interval)::date calendar_date
from generate_series(0, 365) n;
Toto konečné obsazení používám k datu, protože datum + interval vrací časové razítko.