2013-04-25 5 views
5

में वर्चर वैल्यू को इंटीजर/दशमलव मान में कनवर्ट करना डेटा प्रकार varchar से integer या decimal के साथ तालिका में रिकॉर्ड्स के मान को कैसे परिवर्तित करें ताकि मैं मान का योग प्राप्त कर सकूं। मैं SQL Server 2005 का उपयोग करता हूं।SQL सर्वर

मैं इस तरह तालिका संरचना है कि कहते हैं:

ID int 
Stuff varchar 

और रिकॉर्ड

ID = 1, Stuff = 32.43 
ID = 2, Stuff = 43.33 
ID = 3, Stuff = 23.22 

अब मैं स्तंभ सामग्री की कुल प्राप्त करना चाहते हैं:

SELECT SUM(convert(decimal(4,2), Stuff)) as result FROM table 

लेकिन यह काम नहीं करता कृपया मदद चाहिए!

+0

क्या आपको कोई त्रुटि मिल रही है?समेकन के बिना चलाने के लिए प्रयास करें –

+0

अभी भी काम नहीं करते हैं। संदेश 102, त्रुटि: अंकगणित अतिप्रवाह त्रुटि वर्चर को डेटा प्रकार संख्यात्मक में परिवर्तित कर रही है। –

उत्तर

8

तालिका संरचना ... बहुत बुनियादी:

create table tabla(ID int, Stuff varchar (50)); 

insert into tabla values(1, '32.43'); 
insert into tabla values(2, '43.33'); 
insert into tabla values(3, '23.22'); 

क्वेरी:

SELECT SUM(cast(Stuff as decimal(4,2))) as result FROM tabla 

या, इस प्रयास करें:

SELECT SUM(cast(isnull(Stuff,0) as decimal(12,2))) as result FROM tabla 

SQLServer 2008 को कार्य

+0

मेरा मानना ​​है कि ओपी में उन 3 रिकॉर्ड्स – codingbiz

+0

से अधिक है, मैंने उपयोगकर्ता द्वारा प्रस्तावित नमूना डेटा के आधार पर परीक्षण किया है – Hackerman

+0

अभी भी एसक्यूएल सर्वर 2005 में काम नहीं करता है: "अंकगणित ओवरफ्लो त्रुटि वर्चर को डेटा प्रकार संख्या में परिवर्तित कर रही है।" –

0

आप इस तरह के रूप में कास्टिंग के बिना इसका इस्तेमाल कर सकते हैं:

select sum(`stuff`) as mySum from test; 

या यह डाली दशमलव में:

select sum(cast(`stuff` as decimal(4,2))) as mySum from test; 

SQLFiddle

संपादित

एसक्यूएल सर्वर के लिए, आप उपयोग कर सकते हैं:

select sum(cast(stuff as decimal(5,2))) as mySum from test; 

SQLFiddle

+0

पहला विकल्प त्रुटि उत्पन्न करता है: ऑपरेटर डेटा प्रकार वर्कर योग ऑपरेटर के लिए अमान्य है। दूसरा विकल्प त्रुटि उत्पन्न करता है: डेटा प्रकार वर्चर को न्यूमेरिक में कनवर्ट करने में त्रुटि। –

+0

मेरी माफ़ी, आपने 'mysql' के रूप में टैग की है, इसलिए मैंने परीक्षण किया है। – Jon

+0

@ फिलिप्सटेल ने उदाहरण के साथ एमएस एसक्यूएल सर्वर को एसक्यूएल फिडल अपडेट किया। – Jon

1

कारण हो सकता है कि योग अंकों की आवश्यक संख्या को पार कर - 4. यदि आप decimal(10,2) को दशमलव के आकार को बढ़ा है, यह काम करना चाहिए

SELECT SUM(convert(decimal(10,2), Stuff)) as result FROM table 

या

SELECT SUM(CAST(Stuff AS decimal(6,2))) as result FROM table 
2

आप गणित अतिप्रवाह हो रही है। इसका मतलब है कि आप एक रूपांतरण को असंभव बनाने की कोशिश कर रहे हैं। जब आप रूपांतरण करने का प्रयास करते हैं तो यह त्रुटि फेंक दी जाती है और भाग्य डेटा प्रकार मूल डेटा को परिवर्तित करने के लिए पर्याप्त नहीं होता है। उदाहरण के लिए:

यदि आप 100.52 से दशमलव (4,2) को कनवर्ट करने का प्रयास करते हैं तो आपको यह त्रुटि मिल जाएगी। संख्या 100.52 के लिए 5 पदों की आवश्यकता है और उनमें से 2 दशमलव हैं।

दशमलव परिशुद्धता को 16,2 या उससे अधिक की तरह बदलने की कोशिश करें। पहले कुछ रिकॉर्ड्स के साथ प्रयास करें, फिर इसे अपने सभी चयनों में उपयोग करें।