2010-01-10 12 views
11

एक Oracle 10g डाटाबेस मैं इस तरह एक मेज कुछ है का उपयोग करते हुए:ओरेकल तिथि सीमा

create table x(
ID NUMBER(10) primary key, 
wedding DATE NOT NULL 
); 

कैसे मैं

select * from x where wedding is in june 2008??? 

मैं जानता हूँ कि यह शायद एक आसान एक है, लेकिन मैं नहीं मिल सकता है कर सकते हैं अब तक कोई संतोषजनक उत्तर। सहायता बहुत सराहना की है।

उत्तर

19

उपयोग:

SELECT * 
    FROM x 
WHERE x.wedding BETWEEN TO_DATE('2008-JUN-01', 'YYYY-MON-DD') 
          AND TO_DATE('2008-JUL-01', 'YYYY-MON-DD') 

TO_DATE का प्रयोग 0:00:00 का समय भाग है, जो अंतिम तिथि नहीं की आवश्यकता है एक दिन आगे होने के लिए जब तक आप वर्तमान सही करने के लिए तर्क का उपयोग करना चाहते के साथ डेट निर्माण करती है मध्यरात्रि से पहले एक सेकंड होने की तारीख। Untested:

TO_DATE('2008-JUN-30', 'YYYY-MON-DD') + 1 - (1/(24*60*60)) 

30-जून 2008 के एक दिन जोड़ना चाहिए यही कारण है, और उसके बाद क्रम 30-Jun-2008 23:59 की एक अंतिम तिथि वापस जाने के लिए में एक सेकंड घटाना।

संदर्भ:

+2

दिनांक प्रकार में ओरेकल में दिनांक और समय घटक होता है। अभिव्यक्ति TO_DATE ('2008-जून -30', 'YYYY-MON-DD') '2008-जून -30 00:00:00' के बराबर है। यदि डेटा में समय की जानकारी है, तो आपको इस अभिव्यक्ति के साथ समस्या हो सकती है। '2008-जून -30 16:00:00' (4 बजे) पर होने वाली शादी, उपर्युक्त क्वेरी के परिणामस्वरूप नहीं होगी। – zendar

+1

इसलिए मुझे इसे 01 जून और 01 जुलाई के बीच सेट करना चाहिए। – Hoax

+0

पुन "TO_DATE का उपयोग ..." - मैं सहमत हूं कि यदि आपके पास समय और तिथि एक साथ है तो यह थोड़ा और जटिल है। आपकी वर्तमान ऊपरी सीमा: 'TO_DATE ('2008-JUL-01', 'YYYY-MON-DD') अब 2008-JUL-01 से शादियों को प्राप्त कर सकती है जिसमें समय दर्ज नहीं किया गया है (मुझे लगता है कि मध्यरात्रि नहीं है शादियों), तो यह सवाल गलत हो सकती है। आपको शायद किनारे के मामलों को विस्तारित करने और समय के हिस्से और ऑपरेटर के बीच कुछ टिप्पणी जोड़ने की आवश्यकता है। – zendar

2

यह ANSI SQL है, और संस्करण 9i के रूप में ओरेकल द्वारा समर्थित

SELECT * 
FROM x 
WHERE EXTRACT(YEAR FROM wedding) = 2008 
AND EXTRACT(MONTH FROM wedding) = 06 
विशिष्ट ओरेकल TO_CHAR() साथ

क्लासिक समाधान:

SELECT * 
FROM x 
WHERE TO_CHAR(wedding, 'YYYY-MMM') = '2008-JUN' 

(बाद के समाधान समर्थित थे जब डायनासोर अभी भी पृथ्वी पर चले गए थे)

+2

न तो एक अनुक्रमणिका का उपयोग करेगा (यदि कोई मौजूद है) 'शादी' कॉलम पर। –

+0

इसके अलावा, यदि पीएलडब्ल्यू त्रुटियां सक्षम हैं - दोनों विकल्पों का परिणाम डेटा प्रकार त्रुटि से दूर हो जाएगा। –

+0

@ ओएमजी टट्टू - हाँ, आप सही हैं। समाधान के बीच प्रदर्शन के लिए काफी बेहतर है। सुनिश्चित नहीं है कि पीएलडब्लू त्रुटियों का मतलब क्या है। क्या आपके पास मेरे लिए एक सूचक है? टीआईए –

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