En del af problemet er, at standard SQL-udtrykket for intervaller citerer tallet, men ikke nøgleordene. Så du skal være forsigtig.
select current_date, current_date + interval '2' day;
--
2012-02-21 2012-02-23 00:00:00
I PostgreSQL fungerer det også at citere som '2 dage' og '2 dage'. Så du tror måske, at '2' || 'dage' ville svare til, men det er det ikke.
select current_date, current_date + interval '2' || ' days';
--
2012-02-21 2012-02-21 00:00:02 days
Løsningen, som A.H. sagde, er at støbe resultatstrengen som et interval.
Du kan også bruge en variabel i stedet for 2. Dette genererer en kalender for 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;
Jeg bruger den sidste cast til dato, fordi dato + interval returnerer et tidsstempel.