sql - स्ट्रिंग को int में बदलने का प्रयास करते समय रूपांतरण विफल रहता है



sql-server string (2)

इसे इस्तेमाल करे...

select convert(int,convert(float,replace('-6.353,35',',','')))

क्योंकि (), कॉमैस यह फ्लोट में परिवर्तित नहीं किया जा सकता है, इसलिए फ़्लोट को परिवर्तित करने के बाद (,) कॉमा को हटा दें, हम इसे बदल सकते हैं I

यदि आप दशमलव मान चाहते हैं, तो आपको float उपयोग करना चाहिए

select convert(float,replace('-6.353,35',',',''))

@ Marc_s की तरह संपादित करें , फ्लोट की बजाय दशमलव का उपयोग करना पसंद किया गया है

select convert(decimal,replace('-6.353,35',',',''))

https://src-bin.com

मेरे पास स्ट्रिंग कॉलम में कुछ बिक्री संख्याएं हैं जिन्हें मुझे कुछ प्रारूप में बदलने की आवश्यकता है ताकि मैं उन्हें एक-दूसरे के साथ गणना कर सकूं, लेकिन मुझे उन्हें बदलने की कोशिश करते समय यह त्रुटि मिलती है।

Varchar मान '-6.353,35' डेटा प्रकार int में कनवर्ट करने में रूपांतरण विफल रहा।

मुझे इसे इकट्ठा करके किसी भी पैसे खोने की अनुमति नहीं है यह माथेर नहीं करता है, लेकिन मैं किस तरह से कनवर्ट करता हूं, जब तक कि उन्हें आईपी न करें। आपका विचार क्या है?

उदाहरण के लिए मेरे पास -6.353,35 और 300,30 हैं और मैं उनको भी -6.053,05 जोड़ना चाहता हूं


Answer #1

सबसे पहले, आप इसे decimal मान में कनवर्ट करना चाहते हैं, int नहीं, जैसा कि आप दशमलव बिंदु के बाद कुछ भी खो देंगे अन्यथा

यहां समस्या विभाजक है जो आपके मूल्यों को संग्रहीत करते समय इस्तेमाल की जा रही हैं

आपके नंबरों के साथ, आपके पास अंक हैं दशमलव विभानों का प्रतिनिधित्व करने के लिए , हजार विभाजक और अल्पविराम का प्रतिनिधित्व करने के लिए

आपको एक वैध दशमलव मान को कन्वर्ट करने के लिए सक्षम करने के लिए आपको यह उस प्रारूप में रखना होगा जो SQL सर्वर प्रक्रिया कर सकता है।

ऐसा करने का एक आसान तरीका मूल्य बदलने की कोशिश करने से पहले समस्या वर्णों को हटाने / बदलने के लिए होगा:

DECLARE @val AS VARCHAR(10) = '-6.353,35'

-- step 1: remove thousand separator
SET @val = REPLACE(@val, '.', '')
SELECT @val AS RemoveThousandSeparator

-- step 2: replace decimal separator with decimal point
SET @val = REPLACE(@val, ',', '.')    
SELECT CONVERT(DECIMAL(18,2), @val) AS DecimalPointAdded

-- to do it in one statement:
SET @val = '-6.353,35'
SELECT CONVERT(DECIMAL(18,2),
               REPLACE(REPLACE(@val, '.', ''), ',', '.')) AS NumericeRepresentation

इस तरफ से, आप इस तरह के समाधान से बचने के लिए पहले प्रारूप में संख्यात्मक मानों को सही प्रारूप में संग्रहीत करने से बेहतर होगा।





int