2012-03-05 5 views
8

मेरे पास पिछले सप्ताह बनाए गए रिकॉर्ड का एक सेट है, और उनसे मैं केवल उन लोगों को पुनर्प्राप्त करना चाहता हूं जो 6h45 और 19h15 के बीच बनाए गए थे। मेरे पास एक कॉलम creation_date है जिसका मैं उपयोग कर सकता हूं।एसक्यूएल: विशिष्ट तिथियों के लिए समय सीमा में बनाए गए रिकॉर्ड प्राप्त करें

मैं एसक्यूएल में यह कैसे कर सकता हूं?

उत्तर

12

ओरेकल में हम तिथियों को संख्याओं में बदल सकते हैं और विभिन्न तरीकों से अंकगणित लागू कर सकते हैं।

उदाहरण के लिए sysdate-7 हमें सात दिन पहले तारीख देता है। trunc(some_date) दिनांक कॉलम से समय तत्व को हटा देता है। और to_char(some_date, 'SSSSS') हमें मध्यरात्रि के बाद सेकंड की संख्या के रूप में अपना समय तत्व देता है। तो 06:45:00 24300 सेकेंड है और 18:15:59 6 9 35 9 सेकेंड है (कृपया उन नंबरों की जांच करें, क्योंकि वे बैक-ऑफ-लिफाफा अंजीरिन हैं ')।

वैसे भी, इस तरह किसी एक क्वेरी में है कि सभी को एक साथ डाल ...

select * 
from your_table 
where creation_date >= trunc(sysdate)-7 
and to_number(to_char(creation_date, 'sssss')) between 24300 and 69359 

... wil सभी कोर घंटे के भीतर एक समय तत्व के साथ पिछले सप्ताह में बनाए गए रिकॉर्ड उत्पादन।

+0

+1, लेकिन क्या इस सप्ताह से रिकॉर्ड वापस नहीं लाएगा? –

+1

वैसे "पिछले सप्ताह" में एक अस्पष्टता है। मैंने इसका मतलब "पिछले सात दिनों" के लिए लिया लेकिन संभवतः आप कुछ अलग मतलब था। – APC

+0

धन्यवाद दोस्तों, यह काम करता है जैसा कि मैं चाहता था, "पिछले सात दिन" मेरा मतलब था। –

0

उपरोक्त मानदंडों के आधार पर, यह रविवार और शनिवार के बीच 06:45:00 और 1 9:15:59 के घंटों में पिछले सप्ताह से रिकॉर्ड वापस लाएगा।

यदि आप सप्ताह सीमा को अलग करना चाहते हैं तो आप अलग-अलग संख्याओं में "- 7" और "+ 6" समायोजित कर सकते हैं (उदाहरण के लिए, यदि आपका सप्ताह सोमवार से रविवार है)।

select * 
from your_table 
where creation_date >= TRUNC(SYSDATE, 'WW') - 7 
and creation_date <= (TRUNC(SYSDATE, 'WW') - 7) + 6 
and to_char(creation_date, 'hh24:mi:ss') >= '06:45:00' 
and to_char(creation_date, 'hh24:mi:ss') <= '19:15:00' 
+0

धन्यवाद, लेकिन मैं अपने तालिका के विभिन्न तारीखों नहीं 2012/02/27 –

+0

@MMC की तरह किसी एक को - हां, तो आप इस गतिशील बनना चाहते हो? जैसे, क्या आप सिर्फ उस दिन रिकॉर्ड करना चाहते हैं जो 7 दिन पुराना है चाहे आप इसे किस दिन चलाते हैं? –

+0

हां पिछले हफ्ते बनाए गए हैं, लेकिन अगर मैं आज की तारीख तक 02/27/2012 को प्रतिस्थापित करता हूं तो मैं कल 06:30 –

3

यह क्वेरी पिछले 7 दिनों में बनाए गए किसी भी रिकॉर्ड को 6:45 बजे से शाम 7:15 बजे के बीच अपनी निर्माण तिथि के समय हिस्से के साथ वापस कर देगी। जवाब देने के लिए

select * 
    from your_table 
where creation_date > sysdate - 7 
    and to_char(creation_date, 'hh24:mi:ss') >= '06:45:00' 
    and to_char(creation_date, 'hh24:mi:ss') <= '19:15:00' 
+0

+1, लेकिन क्या इस सप्ताह से रिकॉर्ड वापस नहीं लाएगा? –

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