स्ट्रिंग को तारीख में पार्स कैसे करें?


जवाबों:




21

यह मानते हुए कि डेटाबेस MS SQL सर्वर 2012 या अधिक है, यहाँ एक समाधान है जो काम करता है। मूल कथन में इन-लाइन ट्राइ-पार्स शामिल है:

SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;

यहाँ हमने उत्पादन संस्करण में क्या लागू किया है:

UPDATE dbo.StagingInputReview
 SET ReviewedOn = 
     ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
 ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
 -- Check for empty/null/'NULL' text
 WHERE not ReviewedOnText is null 
   AND RTrim(LTrim(ReviewedOnText))<>''
   AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';

ModifiedOn और ModifiedBy कॉलम आंतरिक डेटाबेस ट्रैकिंग उद्देश्यों के लिए हैं।

Microsoft MSDN के ये संदर्भ भी देखें:


यह मानता है कि ओपी Sql सर्वर 2012+ का उपयोग कर रहा है
Mark Kram

8

यद्यपि CONVERT बात काम करती है, आपको वास्तव में इसका उपयोग नहीं करना चाहिए। आपको अपने आप से पूछना चाहिए कि आप SQL- सर्वर में स्ट्रिंग मानों को पार्स क्यों कर रहे हैं। यदि यह एक बार का काम है जहाँ आप मैन्युअल रूप से कुछ डेटा को ठीक कर रहे हैं तो आपको उस डेटा को दूसरी बार नहीं मिलेगा, यह ठीक है, लेकिन यदि कोई एप्लिकेशन इसका उपयोग कर रहा है, तो आपको कुछ बदलना चाहिए। सबसे अच्छा तरीका "डेट" डेटा प्रकार का उपयोग करना होगा। यदि यह उपयोगकर्ता इनपुट है, तो यह और भी बुरा है। फिर आपको पहले क्लाइंट में कुछ जाँच करनी चाहिए। यदि आप वास्तव में स्ट्रिंग मान पास करना चाहते हैं जहां एसक्यूएल-सर्वर एक तारीख की उम्मीद करता है, तो आप हमेशा आईएसओ प्रारूप ('YYYYMMDD') का उपयोग कर सकते हैं और इसे स्वचालित रूप से परिवर्तित करना चाहिए।


5
ऐसी स्थिति के बारे में जहां आप कुछ बाहरी सिस्टम से डेटा फ़ाइलों को आयात कर रहे हैं, और इनपुट कॉलम इन स्वरूपों में से एक में होता है, जैसे "05/31/2013", लेकिन जो एक स्ट्रिंग के रूप में आता है? और आप उस डेटा को आयात करने के लिए एक संग्रहीत कार्यविधि, या SSIS का उपयोग कर इसे लिखने के लिए कह रहे हैं? तब CONVERT का उपयोग करना उचित होगा, है ना?
डेविड बैरो

जरूरी नहीं, उन स्थितियों में जहां एमएस एसक्यूएल सर्वर विश्लेषणात्मक डेटा मॉडल की मेजबानी करता है, लेन-देन वाले लोगों के विपरीत, CONVERT का उपयोग करना पूरी तरह से ठीक है क्योंकि इसमें बहुत से बाहरी स्रोतों से निपटना पड़ता है जो आसानी से एक तारीख प्रकार के रूप में नहीं आते हैं। (जैसा कि डेविड बर्रो ने ऊपर कहा था)।
विल

दिनांक के लिए डिफ़ॉल्ट स्ट्रिंग शाब्दिक प्रारूप YYYY-MM-DD
YB


1
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate

क्या करना चाहिए, परिणाम:

2012-04-24 00:00:00.000

ओपी ने अलग-अलग भाषा सेटिंग्स के लिए जो पोस्ट किया है, उसके लिए वह काम नहीं करता है। कोशिश करो। यदि यह वास्तव में आपके लिए काम करता है, तो कृपया पोस्ट करें कि आपकी वर्तमान भाषा सेटिंग क्या है। धन्यवाद। यहाँ कोशिश करने का कोड है ... SELECT CONVERT (DateTime, '24 .04.2012 ', 121) AS ExpireDate
जेफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.