DATEDIFF
और DATEADD
का उपयोग करने के बजाय डेटाटाइम का दिनांक भाग प्राप्त करें। केवल तारीख के विरुद्ध कॉलम की तुलना करें, और यह उन पंक्तियों को वापस कर देगा जिनमें शून्य-शून्य समय है।
जिस तरह से यह काम करता है यह है कि हम पहली बार युग और मूल्य के बीच अंतर (दिनों में) की गणना करते हैं। हम उस डेटा को युग में एक नया डेटाटाइम बनाने के लिए जोड़ते हैं। चूंकि DATEDIFF
का परिणाम एक पूर्णांक है, इसलिए किसी भी समय घटक गोलाकार हो जाता है।
SELECT *
FROM Table
WHERE DateColumn <> DATEADD(d, DATEDIFF(d, 0, DateColumn), 0)
समय समारोह तो, निम्नलिखित द्वारा लागू किया जा सकता नहीं है कि मैं इस विशिष्ट परिदृश्य के लिए यह सलाह देते हैं:
SELECT DATEDIFF(minute, DATEADD(d, DATEDIFF(d, 0, DateColumn), 0), DateColumn) as MinutesIntoDay,
-- or, if you require higher precision
DATEDIFF(second, DATEADD(d, DATEDIFF(d, 0, DateColumn), 0), DateColumn) as MinutesIntoDay
FROM Table
संपादित करें: अन्य उत्तर में उल्लेख किया है, आप कर सकते हैं के समान प्रभाव प्राप्त करने के लिए DATE
पर कास्ट करें, जो अच्छी तरह से साफ हो जाता है। हालांकि, DATE को केवल SQL Server 2008 में जोड़ा गया था, जबकि सूत्र में कम से कम SQL 2000 पर संगतता है। इसलिए यदि आपको पिछली संगतता की आवश्यकता है या SQL CE से निपट रहे हैं, तो DATE को कास्टिंग अनुपलब्ध है।
क्या इस विधि के साथ कोई सीमाएं/चिंताएं हैं? यह मेरे लिए अजीब लगता है कि यह प्रस्तावित होने में इतना लंबा लगा (अन्य उत्तरों के आधार पर) यदि यह वास्तव में सबसे अच्छा तरीका है? – Codingo
@ माइकल इस तरह से कोई सीमा नहीं है, कम से कम अन्य उत्तरों की तुलना में नहीं।कॉलम पर फ़ंक्शंस को लागू करने के बारे में बुरी बात यह है कि उस कॉलम पर किसी भी इंडेक्स का उपयोग नहीं किया जा सकता है और एसक्यूएल सर्वर को एक पंक्ति स्कैन करना है ताकि आपको पता चल सके कि आपको किन पंक्तियों की आवश्यकता है। –