Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में Msg 241 "दिनांक और/या समय को वर्ण स्ट्रिंग से कनवर्ट करते समय रूपांतरण विफल" ठीक करें

यदि आपको SQL सर्वर त्रुटि संदेश 241 मिल रहा है जिसमें लिखा है वर्ण स्ट्रिंग से दिनांक और/या समय परिवर्तित करते समय रूपांतरण विफल , ऐसा शायद इसलिए है क्योंकि आप किसी स्ट्रिंग को दिनांक/समय मान में बदलने का प्रयास कर रहे हैं, लेकिन उस विशेष स्ट्रिंग को दिनांक/समय मान में परिवर्तित नहीं किया जा सकता है।

त्रुटि का उदाहरण

यहां कोड का एक उदाहरण दिया गया है जो त्रुटि उत्पन्न करता है:

SELECT CAST('Tomorrow' AS date);

परिणाम:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

यहां, हमने स्ट्रिंग को Tomorrow में बदलने का प्रयास किया है date . तक टाइप करें, लेकिन Tomorrow एक मान्य तिथि नहीं है जिसे date . में बदला जा सकता है टाइप करें।

SQL सर्वर स्ट्रिंग को date में नहीं बदल सकता और इसलिए इसने एक त्रुटि लौटा दी।

समाधान 1

इसे ठीक करने का सबसे स्पष्ट तरीका यह है कि स्ट्रिंग को वास्तविक तिथि के समान बदल दिया जाए।

यदि आप एक कॉलम पास कर रहे हैं, तो जांचें कि आपको सही कॉलम मिला है। वही अगर आप एक वेरिएबल पास कर रहे हैं - जांचें कि यह सही वेरिएबल है।

उदाहरण के लिए, निम्न रूपांतरण सफल होता है:

SELECT CAST('20 Feb 2030' AS date);

परिणाम:

2030-02-20

इनपुट तिथि के प्रारूप के आधार पर, आप CONVERT() . का उपयोग करना बेहतर समझ सकते हैं फ़ंक्शन, ताकि आप इनपुट दिनांक अभिव्यक्ति का प्रारूप निर्दिष्ट कर सकें।

उदाहरण:

SELECT 
    CONVERT(date, '03/02/2030', 101) AS 'US with century',
    CONVERT(date, '03/02/30', 1) AS 'US without century',
    CONVERT(date, '03/02/2030', 103) AS 'British with century',
    CONVERT(date, '03/02/30', 3) AS 'US without century';

परिणाम:

+-------------------+----------------------+------------------------+----------------------+
| US with century   | US without century   | British with century   | US without century   |
|-------------------+----------------------+------------------------+----------------------|
| 2030-03-02        | 2030-03-02           | 2030-02-03             | 2030-02-03           |
+-------------------+----------------------+------------------------+----------------------+

समाधान 2

त्रुटि से निपटने का दूसरा तरीका TRY_CAST() . का उपयोग करना है या TRY_CONVERT() . ये फ़ंक्शन NULL लौटाते हैं त्रुटि के बजाय।

उदाहरण:

SELECT TRY_CAST('Tomorrow' AS date);

परिणाम:

NULL

यह अनिवार्य रूप से अंतर्निहित मुद्दे को संबोधित नहीं करता है, यह केवल इसे छुपाता है। रूपांतरण अभी भी नहीं हो सका।

किसी भी मामले में, आपकी आवश्यकताओं के आधार पर यह अभी भी एक व्यवहार्य विकल्प हो सकता है।

समाधान 3

त्रुटि से निपटने का दूसरा तरीका स्ट्रिंग को किसी भिन्न डेटा प्रकार में बदलना है। जाहिर है, अगर आप date . के साथ समाप्त करना चाहते हैं तो यह अच्छा नहीं है टाइप करें, लेकिन शायद त्रुटि इसलिए हुई क्योंकि आपने गलती से date specified निर्दिष्ट कर दी थी दूसरे प्रकार के बजाय टाइप करें।

उदाहरण:

SELECT CAST('Wednesday' AS char(3));

परिणाम:

Wed

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या एक एकल SQL सर्वर कथन परमाणु और सुसंगत है?

  2. SQL सर्वर - UTF-8 एन्कोडिंग के साथ XML प्रकार के कॉलम को परिभाषित करना

  3. मेरा VARCHAR(MAX) फ़ील्ड स्वयं को 4000 पर सीमित कर रहा है; क्या दिया?

  4. SQL सर्वर 2012 से sqlalchemy और pyodbc का उपयोग करके कनेक्ट करना

  5. SQL सर्वर 2005 का उपयोग करके मैं अल्पविराम से अलग किए गए मानों को अलग-अलग पंक्तियों में कैसे विस्तारित करूं?