2012-04-05 4 views
5

मैं एक प्रश्न बनाने की कोशिश कर रहा हूं जो DateTime कॉलम SyncDate पर आधारित होगा।दो टाइम्स ऑफ डे के बीच चयन करने के लिए क्वेरी

कुछ पृष्ठभूमि के रूप में, जिस तालिका से मैं पूछता हूं वह रोज़ाना रोज़ाना हजारों में आयात करता है। मैं उन प्रविष्टियों को ढूंढना चाहता हूं जो दिन के "नियमित" समय पर आयात नहीं करते थे।

इसलिए, मैं पूछना चाहता हूं कि DateTime कॉलम में समय दो बार के बीच है: किसी भी दिन/महीने/वर्ष अवधि पर 14: 00-14: 30 (2-230) कहें।

SELECT * FROM MyTable 
WHERE DatePart(SyncDate, ..?) BETWEEN (14:00..?) and (14:30..?) 

DatePart समारोह मैं क्या जरूरत है प्रतीत हो रहा है, लेकिन मुझे समझ नहीं आता कि कैसे इस स्थिति के लिए लागू करने के लिए। ओह महान queriers आपकी मदद बहुत सराहना की है।

संपादित करें: मुझे गलत था, मैं अपने बैकएंड के रूप में SQL-Server-2005 चला रहा हूं। माफ़ कीजिये!

उत्तर

21

जब से तुम एसक्यूएल सर्वर पर हैं, आप नए TIME डेटाप्रकार उपयोग कर सकते हैं:

:

SELECT * FROM MyTable 
WHERE CAST(SyncDate AS TIME) BETWEEN '14:00' and '14:30' 

अपने बैकएंड 2008 तो आप की तरह कुछ आवश्यकता होगी नहीं है, तो अभी तक :-)

SELECT * FROM MyTable 
WHERE DATEPART(HOUR, SyncDate) = 14 AND DATEPART(MINUTE, SyncDate) BETWEEN 0 AND 30 

14: 00-14: 30 घंटे के लिए जांचने के लिए।

+0

अजीब कैसे। मैं 2008 चला रहा हूं, यह एक कीवर्ड के रूप में 'समय' को पहचानता है, लेकिन कहता है कि यह 'परिभाषित सिस्टम प्रकार' नहीं है। – ImGreg

+0

क्या आपका सर्वर बैकएंड 2008 चल रहा है, या यह सिर्फ SQL सर्वर एमजीएमटी स्टूडियो की आपकी प्रति है ?? 2008 आर 2 पर इसकी जांच की गई और इसे ठीक काम करना चाहिए .... –

+0

आप सही हैं, सिर्फ स्टूडियो। क्या बैकएंड एमडीएसी संस्करण है या मैं इसे कैसे देखूं? – ImGreg

2

इस बारे में ....

select * from MyTable where 
cast(cast(datepart(HH,SyncDate) as char(2)) + cast(datepart(HH,SyncDate) as char(2)) as int) between 1400 and 1430 
+0

iffy विधि की तरह। हालांकि, कलाकारों को int के रूप में निकालें और '1400' के आस-पास एस्ट्रोफ़ेस डालें और यह वास्तव में काम करता है। एक अभिनव दृष्टिकोण के लिए +1। – ImGreg

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