2011-11-01 13 views
11

वक्रार से इंट एसक्यूएल सर्वर 2008 में कनवर्ट करने के लिए कैसे करें।वर्कर सर्वर में एसक्यूएल सर्वर 2008 में कैसे परिवर्तित करें?

मेरे पास निम्नलिखित कोड है जब मैंने इसे चलाने की कोशिश की तो मुझे वर्चर को इंट में परिवर्तित करने की अनुमति नहीं दी गई।

Select Cast([Column1] as INT) 

कॉलम 1 वाराकर (21) नल प्रकार का नहीं है और मैं इसे इंट में परिवर्तित करना चाहता हूं। वास्तव में मैं कॉलम 1 को अन्य तालिका में डालने की कोशिश कर रहा हूं जिसमें फ़ील्ड INT है। क्या कोई इसे बदलने के लिए मेरी मदद कर सकता है?

उत्तर

13

रिक्त स्थान का उपयोग की तरह हालांकि पात्रों TAB, CR या LF एक समस्या नहीं है, रिक्त स्थान के रूप में दिखाई देगा LTRIM या RTRIM द्वारा छंटनी नहीं की जाएगी, और एक समस्या होगी।

उदाहरण के लिए निम्न प्रयास करें:

declare @v1 varchar(21) = '66', 
     @v2 varchar(21) = ' 66 ', 
     @v3 varchar(21) = '66' + char(13) + char(10), 
     @v4 varchar(21) = char(9) + '66' 

select cast(@v1 as int) -- ok 
select cast(@v2 as int) -- ok 
select cast(@v3 as int) -- error 
select cast(@v4 as int) -- error 

इन पात्रों के लिए अपने इनपुट की जाँच करें और यदि आप उन्हें मिल जाए, REPLACE का उपयोग अपने डेटा को साफ करने के लिए।

select cast(replace(replace(@v3, char(13), ''), char(10), '') as int) 

यह कुछ ऐसा है अक्सर हो रहा हो जाएगा, तो यह बेहतर होगा डेटा को साफ करने और संशोधित:


अपनी टिप्पणी प्रति

, आप अपने cast के हिस्से के रूप REPLACE उपयोग कर सकते हैं CR और LF को दर्ज करने से पहले तालिका को पॉप्युलेट किया गया है।

+0

हाँ आप सही हैं '@ v3' वही स्थिति है जो मेरे परिदृश्य के साथ कोई रास्ता या समाधान है ताकि हम इसे वर्चर से int में परिवर्तित कर सकें? –

+0

@ विक्रांतमोर ने 'सीआरएलएफ' को हटाने के लिए 'REPLACE' के उपयोग को शामिल करने के लिए अपना उत्तर अपडेट किया। –

2

इस तरह आप ऐसा करेंगे, क्या यह एक त्रुटि फेंक रहा है? क्या आप वाकई जिस मूल्य को बदलने की कोशिश कर रहे हैं वह परिवर्तनीय है? स्पष्ट कारणों से आप abc123 को एक int में परिवर्तित नहीं कर सकते हैं।

अद्यतन

अपनी टिप्पणी पर मैं किसी भी रिक्त स्थान है कि मूल्यों आप कन्वर्ट करने के लिए कोशिश कर रहे हैं में हैं हटा आधार पर।

+0

@AbeMiessler से हाँ कि स्तंभों में मेरी मान 66 या 2 कोई एक वर्ण है लेकिन वहाँ एक था बाएं पीछे की खाली रिक्त स्थान केवल। –

+1

यह फेंकने में क्या त्रुटि है? क्या आप वाकई वहां कोई जगह नहीं हैं? –

+0

क्या कोई कुल मूल्य संभवतः है? – Eric

1

यह तब तक एक आईएनटी में परिवर्तित करने का सही तरीका है जब तक आपके पास कोई अल्फा वर्ण या नल मान न हो।

आप किसी भी शून्य मान है, तो, cast के लिए

ISNULL(column1, 0) 
+0

हां, मैं आईएसएनयूएलएल के लिए जानता हूं लेकिन हमारे पास कोई शून्य मूल्य नहीं है, हमें मैन्युअल रूप से इसे वर्चर से इंट में सम्मिलित करना होगा। –

+1

उन्होंने दावा किया कि कॉलम पर 'लागू नहीं' लागू किया गया है। –

+0

मैं चयन कन्वर्ट (int, 'Au') का उपयोग कर रहा हूं लेकिन फिर भी रूपांतरण विफलता त्रुटि प्राप्त करें। कोई सुराग? धन्यवाद –

8

आप परिवर्तित समारोह का उपयोग कर सकते हैं:

Select convert(int,[Column1]) 
0

निम्नलिखित कोड का प्रयास करें। ज्यादातर मामलों में, यह अल्पविराम के मुद्दे के कारण होता है।

cast(replace([FIELD NAME],',','') as float) 
0

नीचे कमांड के साथ प्रयास करें, और यह

चयन मामले पूर्णांक पर सभी मूल्यों पूछना होगा जब isnumeric (YourColumn + '।0e0 ') = 1 तो पूर्णांक के रूप में) किसी और शून्य अंत/* मामले (YourColumn डाली */ YourTable

संबंधित मुद्दे