नीचे तालिका संरचना और डेटा के प्रकार का सबसेट है जिसके साथ मैं काम कर रहा हूं।अंकगणित अतिप्रवाह त्रुटि वर्चर को डेटा प्रकार संख्यात्मक में परिवर्तित कर रही है। '10' <= 9.00
CREATE TABLE #Test
(
Val varchar(5)
,Type varchar(5)
)
INSERT #Test VALUES ('Yes','Text')
INSERT #Test VALUES ('10','Int')
INSERT #Test VALUES ('10.00','Float')
INSERT #Test VALUES ('9.00','Float')
INSERT #Test VALUES ('9','Int')
मैं (संख्यात्मक डेटा प्रकार का होना चाहिए) एक प्रश्न मुझे बताएं कि स्तंभ 'वैल' < है दूँगी कि = 9.00 लिखना चाहते हैं। मैंने निम्न कार्य करके ऐसा किया:
SELECT *
FROM
(
SELECT Val
FROM #Test
WHERE Type = 'Int'
) IntsOnly
WHERE IntsOnly.Val <= 9.00
यह मुझे अंकगणित अतिप्रवाह त्रुटि देता है। हालांकि, अगर मैं मूल्य '10' के साथ डेटा की पंक्ति को बाहर करता हूं:
SELECT *
FROM
(
SELECT Val
FROM #Test
WHERE Type = 'Int'
AND Val <> '10'
) IntsOnly
WHERE IntsOnly.Val <= 9.00
यह किसी भी मुद्दे के बिना काम करता है। मेरा प्रश्न यह नहीं है कि इसे कैसे ठीक किया जाए, क्योंकि मुझे पता है कि मैं डेटा को केवल प्रारूप में परिवर्तित कर सकता हूं।
मेरा प्रश्न यह है कि कॉलम 'वैल' में '10' का मान एक त्रुटि लौटा रहा है। निश्चित रूप से तर्क को 'गलत' वापस करना चाहिए और केवल पंक्तियों को बाहर करना चाहिए क्योंकि '10' (जो मुझे लगता है कि पूर्ण रूप से परिवर्तित किया गया है) 9.00 से अधिक है।
धन्यवाद।
अंकगणित अतिप्रवाह त्रुटि कर रही है, क्या आप वाकई है? एक [रूपांतरण त्रुटि] नहीं है (http://stackoverflow.com/q/9136722/11683)? – GSerg
रूपांतरण में *** स्पष्ट *** होने का प्रयास करें। 'सीएएसटी (वैल एएस डिसीमल (9,2)) <= सीएएसटी (9.00 एएस डिसीमल (9,2)) 'क्या देता है? – MatBailie
जीएसर्ग - हाँ, अंकगणित अतिप्रवाह वर्चर को संख्यात्मक रूपांतरित कर रहा है। डैम्स - यह चाल करता है! हालांकि, मैं समझना चाहता हूं कि अंतर्निहित रूपांतरण क्यों काम नहीं करता है? मेरा विचार था कि यह उस रूपांतरण को कर सकता है और किसी मुद्दे का कारण नहीं बनना चाहिए? – JBond