Sebagian dari masalahnya adalah bahwa ekspresi SQL standar untuk interval mengutip angka, tetapi bukan kata kunci. Jadi Anda harus berhati-hati.
select current_date, current_date + interval '2' day;
--
2012-02-21 2012-02-23 00:00:00
Di PostgreSQL, mengutip seperti '2 hari' dan '2 hari' juga berfungsi. Jadi kamu mungkin berpikir bahwa '2' || ' hari' akan setara, tetapi tidak.
select current_date, current_date + interval '2' || ' days';
--
2012-02-21 2012-02-21 00:00:02 days
Solusinya, seperti yang dikatakan A.H., adalah melemparkan string hasil sebagai interval.
Anda juga dapat menggunakan variabel sebagai pengganti 2. Ini menghasilkan kalender untuk tahun 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;
Saya menggunakan pemeran terakhir itu hingga saat ini, karena tanggal + interval mengembalikan stempel waktu.