दिलचस्प पोस्ट
ASP.NET कस्टम त्रुटि पृष्ठ – Server.GetLastError () रिक्त है आर में हिस्टोग्राम के लिए एक घनत्व वक्र फिटिंग करना प्रत्येक मिनट और दूसरा हर 24 घंटे में स्क्रिप्ट निष्पादित करने के लिए क्रॉन्टाब का उपयोग करना आर में फ़्रिक्वेंसी की संख्या एक क्लासपाथ क्या है? एसक्यूएल – कैसे पदानुक्रम को स्टोर और नेविगेट करें? MySQL – समूह में नहीं एक कॉलम का चयन करके स्ट्रिंग के रूप में विधि का नाम देते समय मैं जावा विधि कैसे खोलूं? उच्चतम / सबसे छोटी <जो> प्रति समूह के साथ रिकॉर्ड प्राप्त करें ऑब्जेक्ट के रूप में वेब एपीआई पद्धति के लिए json POST डेटा कैसे पास करें? पायथन में बहुत बड़ी संख्या को संभालना Node.js module.exports का उद्देश्य क्या है और आप इसका उपयोग कैसे करते हैं? एंड्रॉइड में पावर बटन को कैसे हुक कर सकते हैं? जावा क्लास जो नक्शा लागू करता है और प्रविष्टि क्रम रखता है? कैसे scanf एक बफर अतिप्रवाह सी में रोकने के लिए?

रूपांतरण तिथि करने के लिए SQL सर्वर स्ट्रिंग

मैं इस तरह एक स्ट्रिंग परिवर्तित करना चाहता हूं:

'10/15/2008 10:06:32 PM' 

SQL सर्वर में बराबर DATETIME मान में

ओरेकल में, मैं यह कहूंगा:

 TO_DATE('10/15/2008 10:06:32 PM','MM/DD/YYYY HH:MI:SS AM') 

इस प्रश्न का अर्थ है कि मुझे स्ट्रिंग को किसी एक मानक प्रारूप में पार्स करना होगा, और फिर उन कोडों में से किसी एक का उपयोग कर कनवर्ट करना होगा। ऐसा ऐसे सांसारिक संचालन के लिए अजीब लगता है। क्या कोई आसान तरीका है?

वेब के समाधान से एकत्रित समाधान "रूपांतरण तिथि करने के लिए SQL सर्वर स्ट्रिंग"

एसक्यूएल सर्वर (2005, 2000, 7.0) स्ट्रिंग प्रारूप में एक मनमाने ढंग से संरचित डेटैनेशन लेने और इसे डेटटाइम डेटा प्रकार में परिवर्तित करने का कोई भी लचीला या गैर-लचीला तरीका नहीं है।

"स्वैच्छिक रूप से", मेरा मतलब "एक रूप है जो उस व्यक्ति को लिखा है, हालांकि शायद आप या मैं या ग्रह के दूसरी ओर कोई नहीं, सहज और पूरी तरह से स्पष्ट माना जाएगा।" सच कहूँ तो, मुझे यकीन नहीं है कि ऐसा कोई एल्गोरिदम है।

इसे इस्तेमाल करे

 Cast('7/7/2011' as datetime) 

तथा

 Convert(varchar(30),'7/7/2011',102) 

अधिक विवरण के लिए CAST और CONVERT (Transact-SQL) देखें।

इसे अपने क्वेरी प्रोसेसर के माध्यम से चलाएं यह तारीखों और / या बार को ऐसा प्रारूपित करता है और इनमें से किसी एक को आप को जो चाहिए वह आपको देना चाहिए। यह अनुकूल नहीं होना मुश्किल होगा:

 Declare @d datetime select @d = getdate() select @d as OriginalDate, convert(varchar,@d,100) as ConvertedDate, 100 as FormatValue, 'mon dd yyyy hh:miAM (or PM)' as OutputFormat union all select @d,convert(varchar,@d,101),101,'mm/dd/yy' union all select @d,convert(varchar,@d,102),102,'yy.mm.dd' union all select @d,convert(varchar,@d,103),103,'dd/mm/yy' union all select @d,convert(varchar,@d,104),104,'dd.mm.yy' union all select @d,convert(varchar,@d,105),105,'dd-mm-yy' union all select @d,convert(varchar,@d,106),106,'dd mon yy' union all select @d,convert(varchar,@d,107),107,'Mon dd, yy' union all select @d,convert(varchar,@d,108),108,'hh:mm:ss' union all select @d,convert(varchar,@d,109),109,'mon dd yyyy hh:mi:ss:mmmAM (or PM)' union all select @d,convert(varchar,@d,110),110,'mm-dd-yy' union all select @d,convert(varchar,@d,111),111,'yy/mm/dd' union all select @d,convert(varchar,@d,12),12,'yymmdd' union all select @d,convert(varchar,@d,112),112,'yyyymmdd' union all select @d,convert(varchar,@d,113),113,'dd mon yyyy hh:mm:ss:mmm(24h)' union all select @d,convert(varchar,@d,114),114,'hh:mi:ss:mmm(24h)' union all select @d,convert(varchar,@d,120),120,'yyyy-mm-dd hh:mi:ss(24h)' union all select @d,convert(varchar,@d,121),121,'yyyy-mm-dd hh:mi:ss.mmm(24h)' union all select @d,convert(varchar,@d,126),126,'yyyy-mm-dd Thh:mm:ss:mmm(no spaces)' 

SQL सर्वर Denali में, आप कुछ ऐसा करने में सक्षम होंगे जो आपके लिए खोज रहे हैं। लेकिन आप अभी भी किसी भी मनमाने ढंग से परिभाषित निराला तारीख स्ट्रिंग को पार नहीं कर सकते और SQL सर्वर को समायोजित करने की उम्मीद नहीं कर सकते। आपके द्वारा अपने स्वयं के उत्तर में पोस्ट की गई कुछ चीज़ों का उपयोग करके यह एक उदाहरण है। FORMAT () फ़ंक्शन और लोकेल को एक वैकल्पिक तर्क के रूप में स्वीकार भी कर सकता है – यह नेट के स्वरूप पर आधारित है, इसलिए सबसे अधिक नहीं यदि आप सभी टोकन प्रारूपों को देखने की उम्मीद करते हैं जो वहां दिखाई देगा।

 DECLARE @d DATETIME = '2008-10-13 18:45:19'; -- returns Oct-13/2008 18:45:19: SELECT FORMAT(@d, N'MMM-dd/yyyy HH:mm:ss'); -- returns NULL if the conversion fails: SELECT TRY_PARSE(FORMAT(@d, N'MMM-dd/yyyy HH:mm:ss') AS DATETIME); -- returns an error if the conversion fails: SELECT PARSE(FORMAT(@d, N'MMM-dd/yyyy HH:mm:ss') AS DATETIME); 

मैं आपको दृढ़ता से प्रोत्साहित करता हूं कि आप अपनी तिथि के आदानों को और अधिक नियंत्रण और साफ कर लें। लोगों को टाइप करने की तारीखों का उपयोग करके वे किसी भी प्रारूप का इस्तेमाल करते हैं जो कि वे फ़्रीटेक्स्ट प्रपत्र फ़ील्ड में चाहते हैं, अब हमारे पीछे रास्ता होनी चाहिए। यदि कोई 8/9/2011 में प्रवेश करता है तो क्या 9 अगस्त या 8 सितंबर है? यदि आप उन्हें कैलेंडर नियंत्रण पर कोई दिनांक चुनते हैं, तो ऐप प्रारूप को नियंत्रित कर सकता है। आप अपने उपयोगकर्ताओं के व्यवहार की भविष्यवाणी करने के लिए कितना भी प्रयास करते हैं, वे हमेशा उस तारीख को दर्ज करने के लिए एक डंबर तरीका दिखाएंगे, जिसकी आपने योजना नहीं बनाई थी।

हालांकि, Denali तक, मुझे लगता है कि @ ओविडियू की अब तक की सबसे अच्छी सलाह है … इसे अपने स्वयं के CLR फ़ंक्शन को लागू करके काफी तुच्छ बनाया जा सकता है। तब आप एक मामला / स्विच लिख सकते हैं जैसे कि आप चाहते हैं कि बहुत निराला गैर-मानक प्रारूप।


@ डार्जर्ट के लिए अद्यतन :

 SELECT TRY_PARSE('10/15/2008 10:06:32 PM' AS DATETIME USING 'en-us'); SELECT TRY_PARSE('15/10/2008 10:06:32 PM' AS DATETIME USING 'en-gb'); 

परिणाम:

 2008-10-15 22:06:32.000 2008-10-15 22:06:32.000 

आपको अभी भी जानकारी के अन्य महत्वपूर्ण टुकड़े पहले की आवश्यकता है। आप यह निर्धारित करने के लिए कि क्या 6/9/2012 जून 9 या सितंबर 6 है, देशी T-SQL का उपयोग नहीं कर सकते।

इस समस्या के लिए मैं सबसे अच्छा समाधान का उपयोग करने के लिए SQL सर्वर 2005 में एक CLR फ़ंक्शन रखना है, जो कि एक DateTime.Parse या ParseExact फ़ंक्शन का उपयोग एक निर्दिष्ट प्रारूप के साथ DateTime मान को वापस करने के लिए करता है।

क्यों नहीं कोशिश करो

 select convert(date,'10/15/2011 00:00:00',104) as [MM/dd/YYYY] 

दिनांक स्वरूप SQL सर्वर हेल्पर> SQL सर्वर दिनांक प्रारूप में पाया जा सकता है

इस पृष्ठ में सभी निर्दिष्ट डेटाइएफ़ रूपांतरणों के लिए CONVERT फ़ंक्शन के लिए कुछ संदर्भ हैं। यदि आपके मूल्यों में से किसी एक स्वीकार्य पैटर्न में नहीं आती है, तो मुझे लगता है कि पार्सएक्सैक्ट मार्ग जाना सबसे अच्छा है।

निजी रूप से यदि आप मनमानी या पूरी तरह से दीवार स्वरूपों के साथ काम कर रहे हैं, बशर्ते आपको पता है कि वे समय से आगे क्या हैं या फिर आप केवल उस तिथि के अनुभागों को खींचने के लिए regexp का उपयोग कर सकते हैं और एक मान्य तिथि / दिनांक समय घटक बना सकते हैं।

यदि आप SQL सर्वर चाहते हैं कि इसे आज़माएं और समझें, तो बस CAST CAST का उपयोग करें ('जो भी' के रूप में समय-समय पर) हालांकि सामान्य तौर पर यह एक बुरा विचार है अंतर्राष्ट्रीय तिथियों के साथ समस्याएं आती हैं जो आती हैं। जैसे आपने पाया है, उन मुद्दों से बचने के लिए, आप तारीख के ओडीबीसी कैनोनिकल प्रारूप का उपयोग करना चाहते हैं। यह प्रारूप संख्या 120 है, 20 केवल दो अंकों के वर्षों के लिए प्रारूप है मुझे नहीं लगता कि SQL सर्वर में एक अंतर्निहित फ़ंक्शन होता है जो आपको उपयोगकर्ता को दिए गए प्रारूप प्रदान करने की अनुमति देता है। आप अपना खुद भी लिख सकते हैं और यदि आप ऑनलाइन खोज करते हैं तो यह भी एक मिल सकता है