Częścią problemu jest to, że standardowe wyrażenie SQL dla interwałów cytuje liczbę, ale nie słowa kluczowe. Musisz więc być ostrożny.
select current_date, current_date + interval '2' day;
--
2012-02-21 2012-02-23 00:00:00
W PostgreSQL działa również cytowanie typu „2 dni” i „2 dni”. Możesz więc pomyśleć, że „2” || „dni” byłyby równoważne, ale tak nie jest.
select current_date, current_date + interval '2' || ' days';
--
2012-02-21 2012-02-21 00:00:02 days
Rozwiązaniem, jak powiedział A.H., jest rzucenie ciągu wynikowego jako interwał.
Możesz również użyć zmiennej zamiast 2. Spowoduje to wygenerowanie kalendarza 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;
Używam tej ostatecznej obsady do tej pory, ponieważ data + interwał zwraca znacznik czasu.