Een deel van het probleem is dat de standaard SQL-expressie voor intervallen het getal aanhaalt, maar niet de trefwoorden. Dus je moet voorzichtig zijn.
select current_date, current_date + interval '2' day;
--
2012-02-21 2012-02-23 00:00:00
In PostgreSQL werkt citeren als '2 dagen' en '2 dagen' ook. Dus je zou kunnen denken dat '2' || 'dagen' zou gelijk zijn, maar dat is het niet.
select current_date, current_date + interval '2' || ' days';
--
2012-02-21 2012-02-21 00:00:02 days
De oplossing, zoals A.H. zei, is om de resultaatreeks als een interval te casten.
U kunt ook een variabele gebruiken in plaats van 2. Dit genereert een kalender voor 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;
Ik gebruik die definitieve cast tot nu toe, omdat datum + interval een tijdstempel retourneert.