2011-01-26 9 views
53
DELETE from Table WHERE Date > GETDATE(); 

GETDATE() में समय शामिल है। इसके बजायMSSQL GetDate() का उपयोग करते समय मुझे केवल तारीख कैसे मिलती है?

2011-01-26 14:58:21.637 

होने का मैं कैसे प्राप्त कर सकते हैं:

2011-01-26 00:00:00.000 
+1

भी उपयोग कर सकते हैं अनावश्यक है, विचार है कि आप चाहते हो सकता है '> =' बजाय '>' , या आप वास्तव में 2011-01-26 00: 00: 00.000 ... –

+0

पर कॉल को हटाने पर चूक जाएंगे, अच्छी टिप्पणी, मैंने वास्तव में इस टिप्पणी को पढ़ने से पहले इसे बदल दिया :) – sooprise

+0

एक साधारण समाधान होगा 'कास्ट करें (बाएं (getdate(), 11) डेटाटाइम के रूप में) ' –

उत्तर

64

एसक्यूएल सर्वर के लिए थोड़ा सा पूर्वाग्रह

सारांश

DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) 

एसक्यूएल सर्वर 2008, हालांकि date प्रकार है। तो बस का उपयोग

CAST(GETDATE() AS DATE) 

संपादित करें: एक दिन जोड़ने के लिए, इससे पहले कि "शून्य"

DATEADD(day, DATEDIFF(day, -1, GETDATE()), 0) 

cyberkiwi से दिन की तुलना:

एक वैकल्पिक कि 2 कार्यों को शामिल नहीं करता है (+1 ब्रैकेट में या हमारे अंदर हो सकता है)।

DATEDIFF(DAY, 0, GETDATE() +1) 

DateDiff एक नंबर प्रदान करता है, लेकिन भी आप इस अभिव्यक्ति का उपयोग करना चाहते सभी प्रयोजनों के लिए यह एक तारीख के रूप में काम करेंगे, VARCHAR है, यह प्रत्यक्ष परिवर्तित छोड़कर - जो मामले में आप बदलना GETDATE पर सीधे दृष्टिकोण का इस्तेमाल किया है | (), उदाहरण के लिए

convert(varchar, GETDATE() +1, 102) 
+0

पर विचार नहीं करता है मैं इस मूल्य में एक दिन कैसे जोड़ूं? – sooprise

+1

CAST (GETDATE() + 1 AS DATE का चयन करें) – eidgenossen

+0

@eidgenossen: सरल, लेकिन एक अंतर्निहित रूपांतरण पर निर्भर करता है। कम स्पष्ट। – gbn

5
SELECT CONVERT(DATETIME, CONVERT(varchar(10), GETDATE(), 101)) 
+1

101 के लिए क्या है? – sooprise

+0

यह आउटपुट स्ट्रिंग का प्रारूप निर्धारित करता है, इस मामले में mm/dd/yyyy hh: mm: ss। इसलिए वर्कर (10) जो समय के हिस्से को कम करता है। – JohnOpincar

7

यह डेटाबेस विशिष्ट है। आपने निर्दिष्ट नहीं किया है कि आप किस डेटाबेस इंजन का उपयोग कर रहे हैं।

उदा। PostgreSQL में आप कास्ट करते हैं (तिथि के रूप में myvalue)।

+3

आपका मतलब है GETDATE() एक सुराग पर्याप्त नहीं है? – RichardTheKiwi

+0

मुझे लगता है कि ओपी ने कहा "एमएसएसक्यूएल" –

-1
CONVERT(varchar,GETDATE(),102) 
+0

102 के लिए क्या है? – sooprise

+0

101, 102, आदि, CONVERT फ़ंक्शन के लिए केवल पैरामीटर हैं। मेरा मानना ​​है कि आप वास्तव में 101 का उपयोग करना चाहते हैं जो मिमी/डीडी/वाईय के रूप में है, जबकि 102 मिमी में है .dd.yyyy मुझे विश्वास है ... – Saggio

+0

यह एक स्ट्रिंग देता है। निहित रूपांतरण पर भरोसा करने के बजाय, इसे किसी तारीख को स्पष्ट रूप से डालने के लिए सबसे अच्छा है। – Leigh

9

एसक्यूएल सर्वर 2008 के लिए, सबसे अच्छा और सूचकांक के अनुकूल तरीके

DELETE from Table WHERE Date > CAST(GETDATE() as DATE); 

पहले एसक्यूएल सर्वर के संस्करणों के लिए है, तिथि गणित तेजी से परिवर्तन किया VARCHAR करने से काम करेंगे। क्षेत्रीय सेटिंग्स के कारण भी वर्चर में कनवर्ट करना आपको गलत परिणाम दे सकता है।

DELETE from Table WHERE Date > DATEDIFF(d, 0, GETDATE()); 

नोट: यह रैप करने के लिए एक और DATEADD

+0

DATEADD के बिना "पुरानी" शैली [प्राथमिकता] (http://msdn.microsoft.com/en-us/library/ms190309.aspx) के आधार पर int से तारीख तक अंतर्निहित रूपांतरण पर निर्भर करती है। यह अभ्यास में प्रभावी ढंग से DATEADD है, नहीं? मैं स्पष्ट रूप से स्पष्ट रूपांतरण पसंद करता हूं, भले ही यह क्लीनर दिखता हो। – gbn

+0

यह सुनिश्चित नहीं है कि क्यूओ इसके बारे में कैसे जाता है, लेकिन DATEADD मैन्युअल रूप से अनुरोध करने का कोई कारण नहीं है। हालांकि डेटाटाइप डेटाटाइम है, फिर भी तुलना करते समय 'आंतरिक रूप से', इसे एक संख्यात्मक मान में परिवर्तित कर दिया जाता है, इसलिए इसे केवल एक int के रूप में छोड़ना बेहतर हो सकता है। – RichardTheKiwi

0

साथ DATEDIFF आप

DELETE from Table WHERE Date > CONVERT(VARCHAR, GETDATE(), 101); 
+0

जो एक स्ट्रिंग देता है। निहित रूपांतरण पर भरोसा न करें। इसके बजाए, इसे किसी तारीख या दिनांक/समय पर स्पष्ट रूप से डालें। – Leigh

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