En del av problemet är att standard SQL-uttryck för intervaller citerar numret, men inte nyckelorden. Så du måste vara försiktig.
select current_date, current_date + interval '2' day;
--
2012-02-21 2012-02-23 00:00:00
I PostgreSQL fungerar det också att citera som "2 dagar" och "2 dagar". Så du kanske tror att '2' || "dagar" skulle vara likvärdigt, men det är det inte.
select current_date, current_date + interval '2' || ' days';
--
2012-02-21 2012-02-21 00:00:02 days
Lösningen, som A.H. sa, är att kasta resultatsträngen som ett intervall.
Du kan också använda en variabel i stället för 2. Detta genererar en kalender för 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;
Jag använder den sista casten hittills, eftersom datum + intervall returnerar en tidsstämpel.