कई एसक्यूएल सर्वर द्वारा समर्थित प्रारूपों हैं - MSDN Books Online on CAST and CONVERT देखते हैं। उन प्रारूपों में से अधिकांश प्रारूप निर्भर हैं आपके पास कौन सी सेटिंग्स हैं - इसलिए, ये सेटिंग्स कुछ बार काम कर सकती हैं - और कभी-कभी नहीं।
इस हल करने के लिए जिस तरह से (थोड़ा अनुकूलित) आईएसओ 8601 दिनांक स्वरूप कि एसक्यूएल सर्वर द्वारा समर्थित है का उपयोग करना है - इस प्रारूप काम करता है हमेशा - अपने एसक्यूएल सर्वर भाषा और DateFormat सेटिंग की परवाह किए बिना।
ISO-8601 format एसक्यूएल सर्वर द्वारा समर्थित है दो रूपों में आता है:
YYYYMMDD
सिर्फ तारीखें (कुछ ही समय भाग) के लिए; यहां ध्यान दें: कोई डैश नहीं!, यह बहुत महत्वपूर्ण है! YYYY-MM-DD
आपके SQL सर्वर में डेटफॉर्मेट सेटिंग्स से स्वतंत्र नहीं है और सभी परिस्थितियों में काम करेगा!
या:
- दिनांक और समय के लिए
YYYY-MM-DDTHH:MM:SS
- यहाँ ध्यान दें: इस प्रारूप डैश है (लेकिन वे छोड़ा जा सकता है), और एक निश्चित T
दिनांक और समय के बीच परिसीमक के रूप में आपके DATETIME
का हिस्सा।
यह SQL Server 2000 और नए के लिए मान्य है। नहींDATETIME
-
आप एसक्यूएल सर्वर 2008 या नए और DATE
डेटाप्रकार (केवल DATE
का उपयोग करते हैं!), तो आप वास्तव में YYYY-MM-DD
प्रारूप का भी उपयोग कर सकते हैं और यह आपके SQL सर्वर में किसी भी सेटिंग के साथ भी काम करेगा।
मुझसे मत पूछें कि यह पूरा विषय इतना मुश्किल क्यों है और कुछ हद तक भ्रमित है - यही वही तरीका है। लेकिन YYYYMMDD
प्रारूप के साथ, आपको SQL सर्वर के किसी भी संस्करण और आपके SQL सर्वर में किसी भी भाषा और दिनांक स्वरूप सेटिंग के लिए ठीक होना चाहिए।
DECLARE @a datetime
SET @a= CONVERT(datetime, '2012-12-28T14:04:43')
print @a
और इस किसी भी भाषा और दिनांक स्वरूप सेटिंग्स के साथ, किसी भी एसक्यूएल सर्वर स्थापना पर काम करना चाहिए: -
तो अपने मज़बूत स्थिति में इस का उपयोग करें।
आप यूएस अंग्रेज़ी के लिए अपने मूल कोड चलाते हैं - यह ठीक से काम करेगा:
SET LANGUAGE English
DECLARE @a datetime
SET @a= CONVERT(datetime, '2012-12-28 14:04:43')
print @a
Dec 28 2012 2:04PM
लेकिन यदि आप अपनी भाषा के रूप में इतालवी (या जर्मन, या ब्रिटिश, या फ्रेंच) का उपयोग करें, यह असफल हो जायेगी क्योंकि प्रारूप दिनांक/समय स्ट्रिंग के बीच में T
बिना नहीं भाषा-स्वतंत्र और "सुरक्षित" नहीं है:
SET LANGUAGE Italian
DECLARE @a datetime
SET @a= CONVERT(datetime, '2012-12-28 14:04:43')
print @a
संदेश 242, स्तर 16, राज्य 3, रेखा 4
ला conversione di संयुक्त राष्ट्र टिपो di dati varchar में datetime हा generato संयुक्त राष्ट्र Valore गैर compreso nell'intervallo देई valori consentiti।
क्या आपने हाल ही में अपने लॉगिन की डिफ़ॉल्ट भाषा इतालवी में बदल दी है? यह 'DATEFORMAT' को प्रभावित करता है और तारीखों को कैसे पार्स किया जाता है। यदि आप 'सेट भाषा अंग्रेजी' करते हैं तो आपका कोड ठीक काम करता है लेकिन 'SET LANGUAGE italian' –