2013-05-11 5 views
5

मुझे इस प्रश्न के साथ परेशानी है। मैं रिकॉर्ड कि आज की तारीख के लिए SYSTIME बीत चुके हैं का चयन नहीं करने के लिए लेकिन भविष्य दिनांकों रिकॉर्ड प्रदर्शित भले ही वे वर्तमान SYSTIMEएसक्यूएल - भविष्य की तारीख के समय के लिए क्वेरी स्थिति

SELECT * 
    FROM TABLE 
WHERE DATE>= CONVERT(date, SYSDATETIME()) 
    AND STARTTIME > CONVERT(time, SYSDATETIME()) 

इस क्वेरी है बीत चुके हैं चाहता हूँ। मुझे पता है कि यह क्यों काम नहीं करता है लेकिन मैं ऊपर बताए गए कार्यों को करने का तरीका नहीं सोच सकता।

+2

यह क्या rdbms है? क्या आप अतीत में रिकॉर्ड चुनना भी चाहते हैं? –

+0

एसक्यूएल सर्वर, एएसपी साइट – user2321895

+0

के लिए नहीं, मैंने पहले से ही पिछली तिथियों का ख्याल रखा है, मैं केवल वर्तमान और भविष्य के रिकॉर्ड प्रदर्शित करना चाहता हूं। लेकिन वर्तमान तारीख के लिए केवल उन लोगों को रिकॉर्ड किया जाता है जो वर्तमान सिस्टम समय के बाद और भविष्य के रिकॉर्ड के लिए हैं जो आज की तारीख से नहीं हैं। किसी भी समय। – user2321895

उत्तर

5
SELECT * 
FROM TABLE 
WHERE 
    (
    (DATE = CONVERT(date, SYSDATETIME() 
    AND STARTTIME > CONVERT(time, SYSDATETIME() 
    ) 
    OR Date > sysdatetime() 
) 

आप दिनांक समय के बाद से एक या हालत की जरूरत है विभिन्न क्षेत्रों में हैं यदि आप पहली बार की परवाह किए बिना आज की तारीख और समय और उसके बाद भविष्य की सभी तिथियों को हल करना होगा।

0

यह मूल डेटा प्रकारों पर निर्भर करता है। आइए मान लें कि वे date, time, या datetime हैं।

आप भविष्य में कुछ भी करना चाहते हैं, तो इस काम करता है:

where [date] + starttime > sysdatetime() 

तुम सिर्फ भविष्य दिनांकों तो कोशिश करना चाहते हैं:

where [date] > cast(sysdatetime() as date) 

उत्तरार्द्ध है कि कैसे मैं अपने प्रश्न की व्याख्या, लेकिन मुझे 100% यकीन नहीं है कि मेरी व्याख्या सही है।

+1

मुझे लगता है कि आपका मतलब '[date}' –

+0

के बजाय '[date]' है, मैंने उपर्युक्त टाइपो को सही किया है – davmos

0

DATEADD और DATEDIFF फ़ंक्शंस पर एक नज़र डालें।

SELECT Date, 
     TomorrowMidnight = Dateadd(dd, Datediff(dd, 0, Getdate()) + 1, 0), 
     TomorrowTimeNow = Dateadd(dd, 1, Getdate()) 
FROM dbo.test 
WHERE date >= Getdate() 
     AND date < Dateadd(dd, Datediff(dd, 0, Getdate()) + 1, 0) 
     OR date > Dateadd(dd, 1, Getdate()) 

यह कल आधी रात की तुलना में बाद अब की तुलना में, लेकिन पहले एक datetime वाली सभी पंक्तियों का चयन करता है और बाद में की तुलना में (अब +1 दिन) एक datetime स्तंभ के साथ सभी पंक्तियों।

DEMO

संपादित: मैं time स्तंभ अनदेखी की है। हो सकता है कि आपने अभी अपनी आवश्यकता को स्पष्ट करने के लिए इसका इस्तेमाल किया है, लेकिन वास्तव में आपके उत्तर के अनुसार एक datetime कॉलम है।

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