Une partie du problème est que l'expression SQL standard pour les intervalles cite le nombre, mais pas les mots-clés. Il faut donc être prudent.
select current_date, current_date + interval '2' day;
--
2012-02-21 2012-02-23 00:00:00
Dans PostgreSQL, les guillemets tels que '2 jours' et '2 jours' fonctionnent également. Donc vous pourriez penser que '2' || ' jours' serait équivalent, mais ce n'est pas le cas.
select current_date, current_date + interval '2' || ' days';
--
2012-02-21 2012-02-21 00:00:02 days
La solution, comme l'a dit A.H., est de convertir la chaîne de résultat en intervalle.
Vous pouvez également utiliser une variable à la place de 2. Cela génère un calendrier pour 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;
J'utilise cette distribution finale à ce jour, car date + intervalle renvoie un horodatage.