( यदि आप SQL सर्वर 2012 या नए का उपयोग कर रहे हैं, तो कृपया क्लीनर दृष्टिकोण के लिए @ wBob का उत्तर देखें । नीचे दिए गए मेरे उत्तर में उल्लिखित दृष्टिकोण केवल तभी आवश्यक है जब आप SQL Server 2008 R2 या पुराने का उपयोग कर रहे हों। )
यदि आप NUMERIC
अल्पविराम, अवधि या स्थान की परवाह किए बिना परिवर्तित करते हैं , तो आपको हजारों 'विभाजक' की आवश्यकता नहीं है (या चाहते हैं) , इसलिए पहले उनसे छुटकारा पाएं। फिर अल्पविराम को एक अवधि / दशमलव में परिवर्तित करें और आप कर रहे हैं:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
यह दिखाता है:
7000.45
पूर्णता के लिए, मुझे यह उल्लेख करना चाहिए कि मैंने भी कोशिश की:
SET LANGUAGE Greek;
CONVERT के लिए विभिन्न प्रारूप शैलियों को देखते हुए , लेकिन यहां कुछ भी लागू नहीं होता है।
प्रारूप समारोह, लेकिन इनपुट प्रकार एक अंकीय या दिनांक / समय / दिनांक मूल्य (है कि और यह एसक्यूएल सर्वर 2012 में शुरू की गई थी, इसलिए एसक्यूएल सर्वर 2008 R2 के लिए लागू या उससे अधिक नहीं) होना चाहिए।
और कुछ भी काम नहीं लग रहा था। मैं दो REPLACE
कॉल की तुलना में कुछ अधिक सुरुचिपूर्ण खोजने की उम्मीद कर रहा था , लेकिन अभी तक ऐसी कोई किस्मत नहीं है।
इसके अलावा, केवल उल्लेख करने के लिए, जबकि शुद्ध टी-एसक्यूएल समाधान नहीं है, यह SQLCLR के माध्यम से भी पूरा किया जा सकता है। और, एक पूर्व-निर्मित फ़ंक्शन है जो SQL # लाइब्रेरी (जो मैंने लिखा है) को String_TryParseToDecimal नाम से करता है । यह फ़ंक्शन नि: शुल्क संस्करण में उपलब्ध है, और SQL सर्वर 2005 के साथ शुरू होने वाले SQL सर्वर के हर संस्करण में काम करता है:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
यह दिखाता है:
7000.45000000000000000000