2009-09-11 14 views
7

में अनफॉर्म किए गए टेक्स्ट से एक तारीख को पार्स करें, मैं इस टेक्स्ट YYYYMMDD "जैसे डेटा वाले टेक्स्ट कॉलम से दिनांक प्राप्त करने का एक शानदार तरीका जानने का प्रयास कर रहा हूं ... इसलिए हम" 20060508 "मान के रूप में देख सकते हैं कॉलम में, जिसे मैं एक प्रश्न (8 मई, 2006) के रूप में एक प्रश्न से वापस लौटने में सक्षम होना चाहता हूं।एसक्यूएल

मुझे यकीन है कि मैं पर्याप्त समय के साथ कुछ एक साथ हैक कर सकता हूं, लेकिन जिन दृष्टिकोणों के बारे में मैं सोच रहा हूं, वे बहुत ही आकर्षक लगते हैं, और मुझे संदेह है कि यह एक तरीका है जो इसे एक ही प्रश्न में सुंदर ढंग से किया जा सकता है।

कोई सुझाव?

+0

मुझे लगता है कि आप वास्तव में मतलब 8 मई, 2006 के रूप में स्वरूपित पाठ के रूप में यह वापसी (के रूप में विरोध किया एक तारीख के लिए)। – RichardOD

+1

नहीं ... (इस बारे में भ्रम प्रतीत होता है, इसलिए मैंने स्पष्ट रूप से खुद को अच्छी तरह से समझाया नहीं है।) मुझे वास्तव में एक तारीख चाहिए ... मैं सिर्फ "8 मई, 2006" दे रहा था ताकि समझाया जा सके कि दिनांक मूल्य क्या है प्रतिनिधित्व करना चाहिए। जाहिर है, मैंने बस लोगों को भ्रमित कर दिया। :) – Beska

उत्तर

23

यह पहले से ही एक मान्य दिनांक है - आईएसओ 8601 प्रारूप - बस का उपयोग करें:

SELECT CAST('20060508' AS DATETIME) 

या वैकल्पिक रूप से:

SELECT CONVERT(DATETIME, '20060508', 112) 

और कहा कि ठीक करना चाहिए!

आदेश में प्राप्त करने के लिए अपने "08, 2006 मई" प्रदर्शन, एक और कर varchar में तब्दील, तिथि परिवर्तित शैली 107 का उपयोग करते हुए: कास्टिंग & एमएस में परिवर्तित एसक्यूएल

पर

SELECT CONVERT(VARCHAR(25), CAST('2006-05-08' AS DATETIME), 107) 

अधिक जानकारी के लिए देखें here

+0

_2006-05-08 00: 00: 00.000_ और _ _ 8, 2006_ –

+0

+1 के रूप में दिनांक लौटाता है। मैं खुद को CAST चुनूंगा। – RichardOD

+1

हां, सीएएसटी ऐसा करने का पसंदीदा तरीका है, लेकिन एक विशिष्ट शैली प्राप्त करने के लिए, आपको कई बार स्टाइल आईडी के साथ CONVERT का उपयोग करने की आवश्यकता हो सकती है। –

2
select cast('20060508' as datetime) AS MyDate 

आप इस परिणाम देता है ...

MyDate 
----------------------- 
2006-05-08 00:00:00.000 

देखें & कास्टिंग एमएस एसक्यूएल में कनवर्ट करने के बारे में अधिक जानकारी के लिए।

यदि आप एक विशिष्ट प्रारूप (8 मई, 2006) प्राप्त करने की कोशिश कर रहे हैं - आपको केवल कॉलमटाइम वैल्यू के रूप में कॉलम लौटने पर विचार करना चाहिए, और अंत उपयोगकर्ता को उस मूल्य को प्रदर्शित करने के लिए जो भी हो रहा है (वेबसाइट, क्लाइंट ऐप, रिपोर्ट, आदि) स्वरूपण करते हैं। यदि आप इसे क्वेरी पर प्रारूपित करते हैं, तो आप एक स्ट्रिंग वापस कर देंगे, जिससे भविष्य में आपके सामने के अंत से प्रारूपों को स्वैप करना मुश्किल हो जाएगा। यदि आप इसे एसक्यूएल में करना चाहते हैं - उपरोक्त लिंक में प्रारूप 107 देखें।

+0

लिंक के लिए धन्यवाद .... जो कि अन्य उत्तरों में देखे जा रहे नंबरों के बारे में कुछ जादू बताता है। – Beska

1

कोई पसीना नहीं, बस CONVERT। स्टाइल "112", या आईएसओ आपके उदाहरण मामले को संभालेगा।

SELECT CONVERT(datetime,'20060508',112) 

रिटर्न

----------------------- 2006-05-08 00:00:00.000 

(1 row(s) affected) 
1

कोशिश:

SELECT REPLACE(CONVERT(varchar(30),CONVERT(datetime, '20060508'),107),' 0',' ') 

उत्पादन:

------------------- 
May 8, 2006 

(1 row(s) affected) 
+0

अतिरिक्त स्वरूपण के लिए धन्यवाद, हालांकि इसकी आवश्यकता नहीं है ... मैं केवल उस आउटपुट को उस प्रारूप का बेहतर वर्णन करने के लिए दे रहा था जिस पर डेटा शुरू हो रहा था और इसका सही अनुवाद कैसे किया जाना चाहिए। जब तक यह तिथि प्रारूप में है, मैं इसके साथ सौदा कर सकता हूं। – Beska