2012-02-21 23 views
9

PostgreSQL में मैं एक interval साथ current_timestamp concat करना चाहते हैं इस प्रकार concat रहे हैं:PostgreSQL कैसे अंतराल मान '2 दिन'

select current_timestamp + interval 2||' days' 

लेकिन जब मैं करते हैं, मैं एक त्रुटि मिलती है:

[Err] ERROR: syntax error at or near "2" 
LINE 1: select current_timestamp + interval 2||' days' 

लेकिन अगर मैं इसे इस तरह करते हैं, इसे सही ढंग से काम करता है:

select current_timestamp + interval '2 days' 

क्यों एक काम है, लेकिन अन्य नहीं करता है?

निम्नलिखित पृष्ठ के संदर्भ के साथ http://www.postgresql.org/docs/8.0/static/functions-datetime.html

+0

क्या आप ** वास्तव में ** 8.0 का उपयोग कर रहे हैं? (मनुल के लिए आपका लिंक उस संस्करण का उपयोग करता है) –

उत्तर

18

भाग है कि मानक SQL अभिव्यक्ति अंतराल के लिए संख्या उद्धृत करता है, लेकिन कीवर्ड नहीं। तो आपको सावधान रहना होगा।

select current_date, current_date + interval '2' day; 
-- 
2012-02-21 2012-02-23 00:00:00 

पोस्टग्रेएसक्यूएल में, '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; 

मैं तारीख को है कि अंतिम कलाकारों का उपयोग के लिए एक कैलेंडर उत्पन्न करता है।

16

इस वाक्य का प्रयास करें:

select current_timestamp + (2 || ' days')::interval; 

या यहाँ तक कि यह एक:

समस्या का
select current_timestamp + 2 * interval '1 day';