2012-01-04 14 views
11

मैं एक यूनिक्स स्क्रिप्ट को एक SQL ट्रांसएक्ट कमांड के साथ PostgreSQL कमांड में परिवर्तित कर रहा हूं।दो टाइमस्टैम्प के बीच रिकॉर्ड चुनना

मेरे पास रिकॉर्ड के साथ एक सारणी है जिसमें फ़ील्ड last_update_time (xtime) है और मैं उस तालिका में प्रत्येक रिकॉर्ड चुनना चाहता हूं जिसे चयनित अवधि के भीतर अपडेट किया गया है।

कहें, वर्तमान समय यह 05/01/2012 10:00:00 और चयनित समय 04/01/2012 23:55:00 है। मैं इन तिथियों के बीच अद्यतन किए गए तालिका से सभी रिकॉर्ड्स कैसे चुनूं। मैंने psql कमांड जारी करने से पहले यूनिक्स स्क्रिप्ट में 2 गुणा से सेकंड को परिवर्तित कर दिया है, और 2 अवधि के बीच सेकंड में अंतराल की गणना की है।

मैं की तरह

SELECT A,B,C FROM table 
WHERE xtime BETWEEN now() - interval '$selectedtimeParm(in secs)' AND now(); 

मैं मूल्यांकन कर selectedtimeParm के लिए Parm दिक्कत है कुछ सोचा - यह ठीक से हल नहीं होती है।

संपादक की टिप्पणी: क्योंकि मैं अपने जवाब में चर्चा मैं शब्दों period, time frame, time और date datetime प्रकार timestamp के लिए के गलत उपयोग नहीं बदला।

उत्तर

24

क्या बुराई है:

SELECT a,b,c 
FROM table 
WHERE xtime BETWEEN '2012-04-01 23:55:00'::timestamp 
       AND now()::timestamp; 

आप interval के रूप में सेकंड की गिनती के साथ काम करना चाहते हैं:

... 
WHERE xtime BETWEEN now()::timestamp - (interval '1s') * $selectedtimeParm 
       AND now()::timestamp; 

ध्यान दें, मैं कैसे मानक आईएसओ 8601 दिनांक स्वरूप का इस्तेमाल किया YYYY-MM-DD h24:mi:ss जो किसी भी लोकेल या DateStyle सेटिंग के साथ स्पष्ट नहीं है।

ध्यान दें कि, BETWEEN निर्माण के लिए पहला मान छोटा होना चाहिए। यदि आपको नहीं पता कि कौन सा मान छोटा है BETWEEN SYMMETRIC इसके बजाय।

अपने प्रश्न में आप डेटाटाइम प्रकार timestamp को "दिनांक", "समय" और "अवधि" के रूप में संदर्भित करते हैं। शीर्षक में आपने "टाइम फ्रेम" शब्द का उपयोग किया, जिसे मैंने "टाइमस्टैम्प" में बदल दिया। ये सभी शर्तें गलत हैं। स्वतंत्र रूप से उन्हें बदलने से प्रश्न को समझना मुश्किल हो जाता है।

कि, और तथ्य यह है कि आपने केवल psql पर सवाल टैग किया है (समस्या शायद कमांड लाइन टर्मिनल से संबंधित है) यह समझाने में मदद कर सकती है कि किसी ने दिन के लिए उत्तर क्यों दिया। आम तौर पर, यह यहाँ के आसपास के मिनटों का मामला है। मुझे आपके प्रश्न को समझने में कठिन समय था, इसे दो बार पढ़ना पड़ा। साथ या समय क्षेत्र के बिना -

आप डेटा प्रकार date, interval, time और timestamp समझने की जरूरत है। अध्याय "Date/Time Types" in the manual पढ़कर शुरू करें।

त्रुटि संदेश भी एक लंबा रास्ता तय होता।

+0

मुझे अपना उत्तर मिला: तालिका से * चुनें * जहां $_datetime और अब() के बीच record_time; धन्यवाद – Sharon

संबंधित मुद्दे