2009-10-02 18 views
56

में डेटाटाइम में वक्रार को कनवर्ट करें I SQL Server 2008 में प्रारूप mmddyyyydatetime में स्ट्रिंग को कैसे परिवर्तित करूं?SQL सर्वर

मेरे लक्ष्य स्तंभ DateTime

में मैं Convert साथ की कोशिश की और है Date शैली मूल्यों लेकिन मैं एक त्रुटि संदेश मिलता के सबसे:

'एक datetime के लिए एक varchar डेटा प्रकार के रूपांतरण डेटा प्रकार के परिणामस्वरूप ऑफ-ऑफ-रेंज मान होता है। '

+1

क्या tsql में mySQL जैसे str_to_date फ़ंक्शन है? http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date – dnagirl

+2

ओपी mmddyyyy चाहता है; कन्वर्ट का चयन करें (डेटाटाइम, '12312009') - >>> _ संदेश 242, स्तर 16, राज्य 3, रेखा 1 डेटा डेटा प्रकार के डेटा को डेटाटाइम डेटा प्रकार में परिवर्तित करने के परिणामस्वरूप आउट-ऑफ-रेंज डेटाटाइम मान होता है। –

उत्तर

63

ओपी MMDDYY चाहता है और एक सादे परिवर्तित कि लिए काम नहीं करेगा:

select convert(datetime,'12312009') 

Msg 242, Level 16, State 3, Line 1 
The conversion of a char data type to a datetime data type resulted in 
an out-of-range datetime value 

तो यह प्रयास करें:

DECLARE @Date char(8) 
set @Date='12312009' 
SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2)) 

उत्पादन:

----------------------- 
2009-12-31 00:00:00.000 

(1 row(s) affected) 
+2

+1, लेकिन क्या यह स्ट्रिंग्स को विभाजित करने के लिए अच्छा नहीं होगा? http://www.techonthenet.com/oracle/functions/to_date.php – dwerner

+9

@ ड्वर्नर, अगर आप इस तरह की चीजें नहीं करना चाहते हैं तो गलत डेटाटाइप में स्टोर न करें। – HLGEM

+2

अगर मैं गलत हूं तो मुझे सही करें, लेकिन सवाल यह है कि समस्या से प्रस्तावित समस्या थी। मेरा सुझाव उद्देश्य के अनुरूप एक समारोह का उपयोग करना है। – dwerner

2

बीओएल में CAST/CONVERT देखें जो प्रारंभ होना चाहिए।

यदि आपका लक्ष्य कॉलम datetime है तो आपको इसे परिवर्तित करने की आवश्यकता नहीं है, एसक्यूएल आपके लिए यह करेगा।

अन्यथा

CONVERT(datetime, '20090101') 

यह करना चाहिए।

यह एक link कि रूप में अच्छी तरह की मदद करनी चाहिए है:

4

Convert सामान्य जवाब होगा, लेकिन प्रारूप, dd/mm/yyyy परिवर्तित का उपयोग कर परिवर्तित किया जा सकता कनवर्टर के लिए किसी मान्यता प्राप्त प्रारूप (दिनांक नहीं है, yourdatestring, 101) लेकिन आपके पास वह प्रारूप नहीं है इसलिए यह विफल हो जाता है।

समस्या गैर-मानक होने का प्रारूप है, तो आपको इसे उपलब्ध मानक से समझने वाले मानक के लिए एक मानक में हेरफेर करना होगा।

, एक साथ हैक कर लिया गया आप प्रारूप

declare @date char(8) 
set @date = '12312009' 
select convert(datetime, substring(@date,5,4) + substring(@date,1,2) + substring(@date,3,2),112) 
0

मुझे लगता है कि CONVERT सबसे अच्छा विकल्प के रूप में आप एक शैली (दिनांक स्वरूप) शामिल हो सकता है गारंटी कर सकते हैं, तो संयुक्त राज्य अमेरिका डिफ़ॉल्ट 110 जो है mm-dd होगा -yyyy।

4

संभावना आप बुरा डेटा है कि परिवर्तित नहीं कर सकता तारीखों को वर्कर में कभी भी संग्रहित नहीं किया जाना चाहिए क्योंकि यह ASAP या 02/30/2009 जैसी तिथियों की अनुमति देगा। अपने डेटा पर isdate() फ़ंक्शन का उपयोग उन रिकॉर्ड्स को खोजने के लिए करें जो कनवर्ट नहीं कर सकते हैं।

ठीक है मैंने ज्ञात अच्छे डेटा के साथ परीक्षण किया और अभी भी संदेश मिला। आपको एक अलग प्रारूप में कनवर्ट करने की आवश्यकता है क्योंकि यह नहीं पता कि 12302009 mmddyyyy या ddmmyyyy है या नहीं।yyyymmdd का स्वरूप अस्पष्ट नहीं है और एसक्यूएल सर्वर इसे सही ढंग से

मैं इस काम मिल गया में परिवर्तित कर देंगे:

cast(right(@date,4) + left(@date,4) as datetime) 

तुम अब भी एक त्रुटि संदेश यह है कि एक गैर मानक में हैं आप किसी भी है, तो मिल जाएगा प्रारूप '112009' या कुछ टेक्स्ट वैल्यू या रेंज डेट से सही है।

6

SQL सर्वर निश्चित रूप से 'YYYYMMDD' के रूप में तारों को एक समय-समय पर डाला जा सकता है - अन्य सभी तारों को स्पष्ट रूप से कास्ट किया जाना चाहिए।

संस्करण 1 यूनिट चर का उपयोग करता है: यहाँ दो त्वरित कोड ब्लॉक जो फार्म आप के बारे में बात कर रहे हैं से रूपांतरण करना होगा रहे हैं

BEGIN 
DECLARE @input VARCHAR(8), @mon CHAR(2), 
@day char(2), @year char(4), @output DATETIME 

SET @input = '10022009' --today's date 


SELECT @mon = LEFT(@input, 2), @day = SUBSTRING(@input, 3,2), @year = RIGHT(@input,4) 

SELECT @output = @[email protected][email protected] 
SELECT @output 
END 

संस्करण 2 इकाई चर का उपयोग नहीं करता है:

BEGIN 
DECLARE @input CHAR(8), @output DATETIME 
SET @input = '10022009' --today's date 

SELECT @output = RIGHT(@input,4) + SUBSTRING(@input, 3,2) + LEFT(@input, 2) 

SELECT @output 
END 

दोनों मामले एसक्यूएल सर्वर की उस अंतर्निहित रूपांतरण करने की क्षमता पर भरोसा करते हैं।

1

मैं कुछ इसी तरह के साथ भाग्यशाली रहे:

Convert(DATETIME, CONVERT(VARCHAR(2), @Month) + '/' + CONVERT(VARCHAR(2), @Day) 
+ '/' + CONVERT(VARCHAR(4), @Year)) 
0

इस समस्या का मुख्य कारण क्षेत्रीय सेटिंग्स में हो सकता है - डीबी YYYY-MM-DD के लिए इंतजार करते हुए एक एप्लिकेशन sents, उदाहरण के लिए, डीडी-MM -YYYY (रूसी लोकेल प्रारूप) क्योंकि यह मेरे मामले में था। मैंने बस किया - रूसी से अंग्रेजी (संयुक्त राज्य) और voilà से लोकेल प्रारूप बदलें।

0

यह सबसे आसान तरीका है लगता है ..

SELECT REPLACE(CONVERT(CHAR(10), GETDATE(), 110),'-','') 
0

SQL मानक दिनांकों जबकि डालने या अद्यतन होना चाहिए 12/31/9999 11:59:59 1753/01/01 12:00:00 बजे के बीच और PM।

तो यदि आप 1/1/1753 से नीचे डालने/अपडेट कर रहे हैं तो आपको यह त्रुटि मिल जाएगी।

1

मैं विभाजित वर्णों को सम्मिलित करने के लिए STUFF का उपयोग करता हूं और फिर उचित शैली के साथ CONVERT का उपयोग करता हूं। कुछ इस तरह:

DECLARE @dt VARCHAR(100)='111290'; 
SELECT CONVERT(DATETIME,STUFF(STUFF(@dt,3,0,'/'),6,0,'/'),3) 

सबसे पहले आप, 111,290 के बजाय 11/12/90 प्राप्त करने के लिए दो बार STUFF का उपयोग की तुलना में आप का उपयोग datetime में बदलने के लिए (या किसी अन्य फिटिंग प्रारूप: के लिए . का उपयोग जर्मन, - ब्रिटिश के लिए ...) More details on CAST and CONVERT

सर्वश्रेष्ठ तिथि और समय मूल्यों को व्यवस्थित करने के लिए सबसे अच्छा था। yyyy-MM-dd या yyyy-MM-ddThh:mm:ssMore details on ISO8601

किसी भी संस्कृति विशिष्ट प्रारूप मुसीबतों में जल्दी ही नेतृत्व करेंगे या:

  • यह या तो "सार्वभौमिक unseparated प्रारूप" yyyyMMdd
  • या (विशेष रूप से एक्सएमएल अंदर), यह ISO8601 होना चाहिए बाद में ...

0

Try_Convert का उपयोग करें: यदि कास्ट सफल होता है तो निर्दिष्ट डेटा प्रकार पर मूल्य कास्ट देता है; अन्यथा, शून्य वापस आती है।

DECLARE @DateString VARCHAR(10) ='20160805' 
SELECT TRY_CONVERT(DATETIME,@DateString) 

SET @DateString ='Invalid Date' 
SELECT TRY_CONVERT(DATETIME,@DateString) 

लिंक: MSDN TRY_CONVERT (Transact-SQL)