2013-07-01 8 views
8

के बीच है, मेरे पास एक सारणी है जिसमें "टाइम" को डेटाटाइम के रूप में बनाया गया है।जांचें कि क्या समय दो बार (समय डेटाटाइप)

मैं यह जांचने की कोशिश कर रहा हूं कि निर्मित मूल्य का समय दो गुना के बीच है या नहीं।

पहली पंक्ति के लिए निर्मित डेटाटाइम '2013-07-01 00: 00: 00.000' (आधी रात) है और मैं 11 पीएम और 7AM के बीच के समय के साथ वस्तुओं के लिए पूछताछ करने की कोशिश कर रहा हूं।

select * 
from MyTable 
where CAST(Created as time) between '23:00:00' and '06:59:59' 

लेकिन कोई परिणाम नहीं लौटाया गया है।

क्या मुझे अपने समय को समय-समय पर बदलने की ज़रूरत है?

+3

अगले दिन 7AM होना चाहिए और इसके बजाय होना चाहिए? एक उदाहरण [यहां] के साथ –

+0

समान प्रश्न [1] [1]: http://stackoverflow.com/questions/5125076/sql-query-to-select-dates-between-two-dates –

+0

हाँ अगले दिन 11PM और 7AM के बीच – TrueEddie

उत्तर

26

मुझे लगता है आपको लगता है कि यहके बाद 23:00 या 7:00 से पहले है जाँच करना चाहते हैं:

select * 
from MyTable 
where CAST(Created as time) >= '23:00:00' 
    or CAST(Created as time) < '07:00:00' 
+0

यह सही काम करता है, धन्यवाद! – TrueEddie

+0

अच्छा जवाब है लेकिन यह केवल SQL सर्वर 2008 और नए –

+0

पर लागू होता है यदि आप तिथि के आधार पर आइटम को समूहबद्ध करना चाहते हैं तो आपको बहुत सावधान रहना होगा। अगर सुबह सुबह 6 बजे कुछ पैक किया गया था, तो यह आज रात 11:30 बजे पैक किया गया कुछ और समूह के साथ समूह करेगा। यदि आपको तिथि के आधार पर एक साथ समूह करने की आवश्यकता है, तो मैं सुझाव देता हूं कि या तो एक घंटा जोड़ना या सात घंटों का घटाना, फिर आवश्यकतानुसार गणना करना। –

1

यह भी काम करना चाहिए (यहां तक ​​कि एसक्यूएल-सर्वर 2005 में):

SELECT * 
FROM dbo.MyTable 
WHERE Created >= DATEADD(hh,23,DATEADD(day, DATEDIFF(day, 0, Created - 1), 0)) 
    AND Created < DATEADD(hh,7,DATEADD(day, DATEDIFF(day, 0, Created), 0)) 

DEMO

6
select * 
from MyTable 
where CAST(Created as time) not between '07:00' and '22:59:59 997' 
-1

या

select * 
from MyTable 
where CAST(Created as time) >= '23:00:00' 
    AND CAST(Created as time) < '07:00:00' 
+0

प्रश्न में कोई 'OR' नहीं है? – Carpetsmoker

+0

एक समय कभी भी '7: 00' से कम नहीं हो सकता है और' 23: 00' से अधिक नहीं हो सकता है, इसलिए 'रिकॉर्ड' में 0 रिकॉर्ड दर्ज किए जा रहे हैं, इससे कोई फर्क नहीं पड़ता। – MarredCheese

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