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