Một phần của vấn đề là biểu thức SQL tiêu chuẩn cho các khoảng trích dẫn số, chứ không phải từ khóa. Vì vậy, bạn phải cẩn thận.
select current_date, current_date + interval '2' day;
--
2012-02-21 2012-02-23 00:00:00
Trong PostgreSQL, trích dẫn như "2 ngày" và "2 ngày" cũng hoạt động. Vì vậy, bạn có thể nghĩ rằng '2' || 'days' sẽ tương đương, nhưng không phải.
select current_date, current_date + interval '2' || ' days';
--
2012-02-21 2012-02-21 00:00:02 days
Giải pháp, như A.H. đã nói, là ép chuỗi kết quả thành một khoảng.
Bạn cũng có thể sử dụng một biến thay cho 2. Điều này tạo lịch cho năm 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;
Tôi sử dụng lần truyền cuối cùng đó cho đến nay, vì ngày + khoảng thời gian trả về dấu thời gian.