SQL सर्वर द्वारा समर्थित कई प्रारूप हैं - CAST और CONVERT पर MSDN पुस्तकें ऑनलाइन देखें । उन स्वरूपों में से अधिकांश इस बात पर निर्भर हैं कि आपके पास क्या सेटिंग्स हैं - इसलिए, ये सेटिंग्स कुछ समय काम कर सकती हैं - और कभी-कभी नहीं।
इसे हल करने का तरीका (थोड़ा अनुकूलित) ISO-8601 दिनांक स्वरूप का उपयोग करना है जो SQL सर्वर द्वारा समर्थित है - यह प्रारूप हमेशा काम करता है - आपकी SQL सर्वर भाषा और दिनांकरूप सेटिंग्स के बावजूद।
आईएसओ 8601 प्रारूप एसक्यूएल सर्वर द्वारा समर्थित है दो रूपों में आता है:
YYYYMMDDसिर्फ तारीखों के लिए (कोई समय भाग नहीं); यहाँ ध्यान दें: कोई डैश! , यह बहुत महत्वपूर्ण है! YYYY-MM-DDहै नहीं अपने एसक्यूएल सर्वर में DateFormat सेटिंग्स के स्वतंत्र और होगा नहीं सभी परिस्थितियों में काम करते हैं!
या:
YYYY-MM-DDTHH:MM:SSदिनांक और समय के लिए - यहाँ ध्यान दें: इस प्रारूप में है डैश हैं (लेकिन उन्हें छोड़ा जा सकता है), और Tआपके दिनांक और समय के भाग के बीच परिसीमन के रूप में एक निश्चित DATETIME।
यह SQL Server 2000 और नए के लिए मान्य है।
तो अपने ठोस मामले में - इन तारों का उपयोग करें:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
और आपको ठीक होना चाहिए (ध्यान दें: आपको अंतर्राष्ट्रीय उपयोग करने की आवश्यकता है 12-घंटे AM / PM प्रारूप के बजाय 24-घंटे के प्रारूप )।
वैकल्पिक रूप से : यदि आप SQL Server 2008 या नए पर हैं, तो आप DATETIME2डेटाटाइप (सादे के बजाय DATETIME) का उपयोग भी कर सकते हैं और आपका करंट INSERTबिना किसी समस्या के काम करेगा! :-)DATETIME2 रूपांतरण पर बहुत बेहतर और बहुत कम अचार है - और यह वैसे भी SQL Server 2008 या नए के लिए डेट / टाइम डेटा प्रकारों की सिफारिश है।
SELECT
CAST('02-21-2012 6:10:00 PM' AS DATETIME2), -- works just fine
CAST('01-01-2012 12:00:00 AM' AS DATETIME2) -- works just fine
मुझसे यह मत पूछिए कि यह पूरा विषय इतना पेचीदा और कुछ हद तक भ्रमित करने वाला क्यों है - बस यही तरीका है। लेकिन YYYYMMDDप्रारूप के साथ , आपको SQL सर्वर के किसी भी संस्करण के लिए ठीक होना चाहिए और अपने SQL सर्वर में किसी भी भाषा और दिनांक-निर्धारण सेटिंग के लिए।