मुझे एक डेटा खींचने में दिलचस्पी है जहां एक कार्य पिछले छह महीनों में पूरा हुआ। समस्या यह है कि मैं केवल उस डेटा को देखने के लिए इच्छुक हूं जो सुबह 06:00 से 09:00 बजे के बीच पूरा होता है।
मुझे यकीन नहीं है कि मैं अपने एसक्यूएल बयान के भीतर समय की स्थिति को कैसे शामिल कर सकता हूं। क्या कोई मुझे यहां से बाहर निकलने में मदद कर सकता है?
मेरा सरल SQL कोड इस प्रकार है:
Select TimeTaskCompleted, Task
From Task
Where TimeTaskCompleted between ‘07/01/2015’ and ‘09/30/2015’
धन्यवाद
** TimeTaskCompleted एक DateTime कॉलम है।
3 जवाब
बस DATEPART फ़ंक्शन का उपयोग करें:
Select TimeTaskCompleted, Task
From Task
Where TimeTaskCompleted between ‘07/01/2015’ and ‘09/30/2015’
AND DATEPART(hh,TimeTaskCompleted) between 6 and 20 --24 hour time
कुछ टिप्पणियां। आपको दिनांक / समय कॉलम के साथ between
का उपयोग नहीं करना चाहिए, क्योंकि यह भ्रामक है। आपकी अभिव्यक्ति उन कार्यों को नहीं खोजती है जो 2015-09-30 को पूरे हुए हैं। मेरा मानना है कि सितंबर के अंतिम दिन को शामिल करने का इरादा है।
क्वेरी लिखने का एक बेहतर तरीका स्पष्ट असमानताओं के साथ और आईएसओ मानक तिथि स्वरूपों का उपयोग करना है:
Select TimeTaskCompleted, Task
From Task
Where TimeTaskCompleted >= '2015-07-01' and
TimeTaskCompleted < '2015-10-01';
(यदि आप अस्पष्ट SQL सर्वर दिनांक चाहते हैं, तो हाइफ़न को हटा दें; उपरोक्त को एक अंतर्राष्ट्रीयकरण सेटिंग के साथ YYYY-DD-MM के रूप में गलत व्याख्या की जा सकती है।)
फिर, आप अन्य उत्तरों में प्रस्तावित शर्तों में से किसी एक को जोड़ सकते हैं, हालांकि मैं यहां between
का उपयोग नहीं करूंगा:
where CAST(TimeTaskCompleted AS TIME) >= '06:00:00' and
CAST(TimeTaskCompleted AS TIME) <= '21:00:00'
या:
where datepart(hour, TimeTaskCompleted) between 6 and 20
नोट: उत्तरार्द्ध थोड़ा भ्रमित हो सकता है क्योंकि यह तर्क में "20" कहता है (8:00 बजे।), लेकिन इरादा "9:00 बजे" पर जाना है।
आप इसे एक उप-क्वेरी के साथ हल कर सकते हैं; मैंने तिथि सीमा को हार्ड-कोड करने के बजाय पिछले 6 महीनों के साथ काम करने के लिए आपकी क्वेरी को बदल दिया है, जिससे मुझे काम करने के लिए डेटा का सेट मिल जाता है। फिर TimeTaskCompleted मान को TIME डेटा प्रकार पर ले जाएं और उस परिणाम को फ़िल्टर करने के लिए जिसका उपयोग उस समय की श्रेणी में करें जिसमें आप रुचि रखते थे।
SELECT *
FROM (
SELECT TimeTaskCompleted, Task
FROM Task
WHERE TimeTaskCompleted > DATEADD(Month, -6, GETDATE())
) AS T1
WHERE CAST(TimeTaskCompleted AS TIME) BETWEEN '06:00' and '21:00'
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।