समस्या का एक हिस्सा यह है कि अंतराल के लिए मानक SQL अभिव्यक्ति संख्या को उद्धृत करती है, लेकिन कीवर्ड नहीं। इसलिए आपको सावधान रहना होगा।
select current_date, current_date + interval '2' day;
--
2012-02-21 2012-02-23 00:00:00
PostgreSQL में, '2 दिन' और '2 दिन' जैसे उद्धरण भी काम करते हैं। तो आप सोच सकते हैं कि '2' || 'दिन' बराबर होगा, लेकिन ऐसा नहीं है।
select current_date, current_date + interval '2' || ' days';
--
2012-02-21 2012-02-21 00:00:02 days
समाधान, जैसा कि एएच ने कहा, परिणाम स्ट्रिंग को अंतराल के रूप में डालना है।
आप 2 के स्थान पर एक चर का उपयोग भी कर सकते हैं। यह 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;
मैं आज तक उस अंतिम कास्ट का उपयोग करता हूं, क्योंकि दिनांक + अंतराल एक टाइमस्टैम्प देता है।