2012-02-08 11 views
8

मैं पिछले 5 वर्षों में बेचे गए सभी उत्पादों से पूछताछ करना चाहता हूं। यह भी बजाय सभी दिनों की गणना और sysdate से घटा दें की एक अच्छे रास्तेपिछले 5 वर्षों में पूछताछ

select * from products 
where time between sysdate-1826 and sysdate 

लेकिन:
यह संभव इस तरह यह करने के लिए है?

+0

यह अप्रत्यक्ष रूप से @ जस्टिनकेव के उत्तर द्वारा संबोधित किया गया है, लेकिन 1826 दिन लगातार 5 साल के बराबर नहीं होते हैं (5 वर्ष की अवधि में 1 या 2 लीप वर्ष हो सकते हैं)। यही कारण है कि ऑपरेटरों का उपयोग करना बेहतर है जो पूरे महीनों या वर्षों में सौदा करते हैं (जो लगातार हैं)। – Allan

उत्तर

17
SELECT * 
    FROM products 
WHERE date_column >= add_months(sysdate, -12*5) 

या

SELECT * 
    FROM products 
WHERE date_column >= sysdate - interval '5' year 

दोनों आप पिछले 5 वर्षों से सभी पंक्तियों को दे देंगे (आप आम तौर पर जोड़ना चाहते हैं, हालांकि समय के हिस्से को हटाने के लिए TRUNC जब तक आप वास्तव में परवाह नहीं करते कि क्या 8 फरवरी, 2007 को सुबह या दोपहर में एक पंक्ति बनाई गई थी)।

+1

दूसरे उदाहरण के बारे में नोट: अंतराल अंकगणित" ORA-01839: दिनांक निर्दिष्ट महीने के लिए मान्य नहीं है "यदि sysdate एक छलांग दिन होता है। –

0
select * from products 
where time > DATE_SUB(NOW(), INTERVAL 5 YEAR) 

दिनांक उप अब से 5 साल घटा देंगे

+1

यह ओरेकल पर है, date_sub काम नहीं करेगा और अब() –

+2

@ जेम्स एल - DATE_SUB एक ऐसा कार्य नहीं है जो ओरेकल में उपलब्ध है। मुझे विश्वास है कि यह एक एसक्यूएल सर्वर समारोह है। –

+0

धन्यवाद, लेकिन मुझे निम्न त्रुटि 'अनुपलब्ध दाएं कोष्ठक' मिल रही थी। तब मैंने यह पाया: [date_sub() त्रुटि दे रहा है] (https://forums.oracle.com/forums/thread.jspa?threadID=2171098) और यह समाधान था: 'समय> SYSDATE - INTERVAL' 5 'वर्ष ' –

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