मुझे एक डेटा खींचने में दिलचस्पी है जहां एक कार्य पिछले छह महीनों में पूरा हुआ। समस्या यह है कि मैं केवल उस डेटा को देखने के लिए इच्छुक हूं जो सुबह 06:00 से 09:00 बजे के बीच पूरा होता है।

मुझे यकीन नहीं है कि मैं अपने एसक्यूएल बयान के भीतर समय की स्थिति को कैसे शामिल कर सकता हूं। क्या कोई मुझे यहां से बाहर निकलने में मदद कर सकता है?

मेरा सरल SQL कोड इस प्रकार है:

Select TimeTaskCompleted, Task
From Task 
Where TimeTaskCompleted between ‘07/01/2015’ and ‘09/30/2015’

धन्यवाद

** TimeTaskCompleted एक DateTime कॉलम है।

0
Tayyab Amin 14 नवम्बर 2015, 18:12

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

SQLFiddle

2
Kyle Hale 14 नवम्बर 2015, 21:06

कुछ टिप्पणियां। आपको दिनांक / समय कॉलम के साथ 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 बजे" पर जाना है।

2
Gordon Linoff 14 नवम्बर 2015, 16:11

आप इसे एक उप-क्वेरी के साथ हल कर सकते हैं; मैंने तिथि सीमा को हार्ड-कोड करने के बजाय पिछले 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'
0
Simon Martin 14 नवम्बर 2015, 15:30