दिलचस्प पोस्ट
जावा Arrays.equals () दो आयामी arrays के लिए झूठी देता है क्या छिपाना / सांकेतिक शब्दों में बदलना / एन्क्रिप्ट php स्रोत कोड संभव है और दूसरों को सिस्टम है? ऑब्जेक्ट कंटेंट को सही तरीके से कैसे मुद्रित करें? एंड्रॉइड बाढ़-भर एल्गोरिथम एक स्ट्रिंग के दूसरे स्ट्रिंग के साथ बदलें मैं संख्यात्मक इनपुट को बलपूर्वक बिना संपादन टेक्स्ट पर अंकीय कीबोर्ड पर कैसे डिफ़ॉल्ट कर सकता हूं? (अब डिफ़ॉल्ट) एम्बर डेटा JSON-API अनुकूलक के साथ त्रुटियों को संभालना समयक्षेत्र जावास्क्रिप्ट के बिना पार्स की तारीख दृश्य स्टूडियो में डिफ़ॉल्ट रूप से प्रोजेक्ट से सुरक्षित चेतावनियां निकालें (_CRT_SECURE_NO_WARNINGS) व्यवस्थित डेटा में एकाधिक स्तंभों को मिलाएं IPhone पर एक 3D मॉडल प्रदर्शित करना चाहते हैं: आरंभ करने के लिए कैसे? गतिशील रूप से संशोधित पेज सामग्री के साथ IE7 रिश्तेदार / पूर्ण स्थिति बग .NET 4 में एक JSON स्ट्रिंग में सी # ऑब्जेक्ट को चालू करें स्ट्रिंग और अर्रेबफर के बीच परिवर्तित करना जावास्क्रिप्ट में gzip और zlib स्ट्रिंग को खारिज करें

SQL सर्वर में दशमलव से पीछे वाले शून्य निकालें

मेरे पास एक स्तंभ DECIMAL(9,6) यानी यह 99 9, 123456 जैसे मूल्यों का समर्थन करता है।

लेकिन जब मैं 1234567 जैसी डेटा सम्मिलित करता हूं तो यह 123456700 हो जाता है

उन शून्य को कैसे निकालें?

Solutions Collecting From Web of "SQL सर्वर में दशमलव से पीछे वाले शून्य निकालें"

जब तक आप उसे स्ट्रिंग में बदलना नहीं चाहते हैं, तब तक आप ऐसा नहीं कर सकते। आपको प्रस्तुति परत में ऐसा करने की आवश्यकता है

अल्पविराम के दाईं ओर एक decimal(9,6) 9, 6 decimal(9,6) 6 अंक स्टोर करता है क्या पीछे वाले शून्य प्रदर्शित करना है या नहीं एक प्रारूपण निर्णय है, जो आमतौर पर ग्राहक पक्ष पर लागू होता है

लेकिन चूंकि एसएसएमएस फॉर्मेट्स बिना शून्य के शून्य के लिए float करते हैं, तो आप decimal को float डालने से पीछे वाले शून्य हटा सकते हैं:

 select cast(123.4567 as DECIMAL(9,6)) , cast(cast(123.4567 as DECIMAL(9,6)) as float) 

प्रिंट:

 123.456700 123,4567 

(मेरे दशमलव विभाजक एक अल्पविराम है, फिर भी एसएसएमएस एक दशमलव बिंदु के साथ दशमलव में दशमलव है। जाहिर है एक ज्ञात मुद्दा ।)

आप FORMAT() फ़ंक्शन (SqlAzure और SQL Server 2012+) का उपयोग कर सकते हैं:

 SELECT FORMAT(CAST(15.12 AS DECIMAL(9,6)), 'g18') -- '15.12' SELECT FORMAT(CAST(0.0001575 AS DECIMAL(9,6)), 'g10') -- '0.000158' SELECT FORMAT(CAST(2.0 AS DECIMAL(9,6)), 'g15') -- '2' 

g17 (या रीयल) के साथ प्रयोग करते समय सावधान रहें: g17 या बड़ा (या g8 या असली के साथ बड़ा) का उपयोग न करें, क्योंकि मशीन प्रतिनिधित्व की सीमित सटीकता अवांछित प्रभाव का कारण बनती है:

 SELECT FORMAT(CAST(15.12 AS FLOAT), 'g17') -- '15.119999999999999' SELECT FORMAT(CAST(0.9 AS REAL), 'g8') -- '0.89999998' SELECT FORMAT(CAST(0.9 AS REAL), 'g7') -- '0.9' 

इसके अलावा, ध्यान दें कि, दस्तावेज के अनुसार:

FORMAT .NET फ़्रेमवर्क कॉमन लैंग्वेज रनटाइम (सीएलआर) की उपस्थिति पर निर्भर करता है। इस फ़ंक्शन को रिमोट नहीं किया जाएगा क्योंकि यह सीएलआर की उपस्थिति पर निर्भर करता है। रिमोट सर्वर पर एक त्रुटि के कारण सीएलआर के लिए फ़ंक्शन को रिमोट करना

SqlAzure में भी कार्य करता है

 SELECT CONVERT(DOUBLE PRECISION, [ColumnName]) 
 SELECT REVERSE(ROUND(REVERSE(2.5500),1)) 

प्रिंट:

 2.55 
 Cast(20.5500 as Decimal(6,2)) 

इसे करना चाहिए

मेरे पास एक समान समस्या थी, लेकिन दशमलव दशमलव को हटाने के लिए भी आवश्यक था, जहां कोई दशमलव मौजूद नहीं था, यहां मेरा समाधान था जो दशमलव के अपने घटकों में विभाजित करता है, और वर्णों की संख्या को दशमलव दशमलव स्ट्रिंग से लेकर लंबाई तक ले जाता है अंश घटक (केस का उपयोग किए बिना) मामलों को और अधिक दिलचस्प बनाने के लिए, मेरी संख्या अपने दशमलव के बिना एक फ्लोट के रूप में संग्रहित की गई थी।

 DECLARE @MyNum FLOAT SET @MyNum = 700000 SELECT CAST(PARSENAME(CONVERT(NUMERIC(15,2),@MyNum/10000),2) AS VARCHAR(10)) + SUBSTRING('.',1,LEN(REPLACE(RTRIM(REPLACE(CAST(PARSENAME(CONVERT(NUMERIC(15,2),@MyNum/10000),1) AS VARCHAR(2)),'0',' ')),' ','0'))) + REPLACE(RTRIM(REPLACE(CAST(PARSENAME(CONVERT(NUMERIC(15,2),@MyNum/10000),1) AS VARCHAR(2)),'0',' ')),' ','0') 

परिणाम दर्दनाक है, मुझे पता है, लेकिन मैं वहां गया, इसके बाद के संस्करण के उत्तर से बहुत मदद की

मुझे अपने दशमांकों पर अनुक्रमित शून्य निकालने की जरूरत थी, इसलिए मैं केवल कुछ प्रमुख शून्य के साथ एक निश्चित लंबाई की एक स्ट्रिंग का उत्पादन कर सकता था

(जैसे मुझे 14 वर्णों को आउटपुट करने की जरूरत थी, ताकि 142.023400 000000142.0234 हो जाए),

मैंने parsename इस्तेमाल किया, reverse और cast parsename को निकालने के लिए as int cast :

 SELECT PARSENAME(2.5500,2) + '.' + REVERSE(CAST(REVERSE(PARSENAME(2.5500,1)) as int)) 

(फिर से मेरे अग्रणी शून्य प्राप्त करने के बाद मैं ऊपर की लंबाई के आधार पर शून्य की सही संख्या को दोहरा सकता हूं और उपरोक्त के सामने इसको सम्मिलित कर सकता हूं)

मुझे उम्मीद है कि यह किसी को मदद करता है

टीएसक्यूएल में अग्रणी और अनुक्रमित शून्य को दूर करना संभव है

  1. यदि स्ट्रिंग नहीं तो STR TSQL फ़ंक्शन का उपयोग करके उसे स्ट्रिंग में कनवर्ट करें, फिर

  2. दोनों अग्रणी और अनुक्रमित शून्य निकालें

     SELECT REPLACE(RTRIM(LTRIM(REPLACE(AccNo,'0',' '))),' ','0') AccNo FROM @BankAccount 
  3. फ़ोरम पर अधिक जानकारी

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

 SELECT REPLACE(TRIM(REPLACE(20.5500, "0", " ")), " ", "0") 

20.55 देता है

सटीकता के नुकसान की संभावना के कारण परिवर्तित होने से पहले सबसे अच्छा तरीका फ्लोट या मनी में परिवर्तित नहीं किया जा रहा है। तो सुरक्षित तरीके कुछ ऐसा हो सकते हैं:

 CREATE FUNCTION [dbo].[fn_ConvertToString] ( @value sql_variant ) RETURNS varchar(max) AS BEGIN declare @x varchar(max) set @x= reverse(replace(ltrim(reverse(replace(convert(varchar(max) , @value),'0',' '))),' ',0)) --remove "unneeded "dot" if any set @x = Replace(RTRIM(Replace(@x,'.',' ')),' ' ,'.') return @x END 

जहां @ मान किसी भी दशमलव (एक्स, वाई) हो सकता है

एक अन्य विकल्प…

मुझे नहीं पता कि यह कैसे कुशल है, लेकिन यह काम करने लगता है और फ्लोट के माध्यम से नहीं जाता है:

 select replace(rtrim(replace( replace(rtrim(replace(cast(@value as varchar(40)), '0', ' ')), ' ', '0') , '.', ' ')), ' ', '.') 

मध्य रेखा स्ट्रेट्स को पीछे छोड़ देता है, बाहरी दो बिंदु को हटाते हैं यदि कोई दशमलव अंक नहीं हैं

इस बारे में कैसा है? मानते हैं कि डेटा @ अपने डेटा के रूप में आ रहा है:

 BEGIN DECLARE @thisText VARCHAR(255) SET @thisText = REPLACE(RTRIM(REPLACE(@thisData, '0', ' ')), ' ', '0') IF SUBSTRING(@thisText, LEN(@thisText), 1) = '.' RETURN STUFF(@thisText, LEN(@thisText), 1, '') RETURN @thisText END 
 case when left(replace(ltrim(rtrim(replace(str(XXX, 38, 10), '0', ' '))), ' ', '0'), 1) = '.' then '0' else '' end + replace(ltrim(rtrim(replace(str(XXX, 38, 10), '0', ' '))), ' ', '0') + case when right(replace(ltrim(rtrim(replace(str(XXX, 38, 10), '0', ' '))), ' ', '0'), 1) = '.' then '0' else '' end 

मैं समझता हूं कि यह एक पुरानी पोस्ट है लेकिन मैं एसक्यूएल प्रदान करना चाहूंगा कि मैं इसके साथ आया हूं

 DECLARE @value DECIMAL(23,3) set @value = 1.2000 select @value original_val, SUBSTRING( CAST( @value as VARCHAR(100)), 0, PATINDEX('%.%',CAST(@value as VARCHAR(100))) ) + CASE WHEN ROUND( REVERSE( SUBSTRING( CAST(@value as VARCHAR(100)), PATINDEX('%.%',CAST(@value as VARCHAR(100)))+1, LEN(CAST(@value as VARCHAR(100))) ) ) ,1) > 0 THEN '.' + REVERSE(ROUND(REVERSE(SUBSTRING( CAST(@value as VARCHAR(100)), PATINDEX('%.%',CAST(@value as VARCHAR(100)))+1, LEN(CAST(@value as VARCHAR(100))) ) ),1)) ELSE '' END AS modified_val 

मुझे पता है कि यह थ्रेड बहुत पुराना है, लेकिन जिनके लिए SQL Server 2012 या इसके बाद के संस्करण का उपयोग नहीं किया गया है या किसी भी कारण FORMAT फ़ंक्शन का उपयोग नहीं किया जा सकता है, इसलिए निम्न कार्य करता है

इसके अलावा, बहुत सारे समाधान काम नहीं करते अगर संख्या 1 से कम (जैसे 0.01230000) थी।

कृपया ध्यान दें कि निम्न नकारात्मक संख्याओं के साथ काम नहीं करता है।

 DECLARE @num decimal(28,14) = 10.012345000 SELECT PARSENAME(@num,2) + REPLACE(RTRIM(LTRIM(REPLACE(@num-PARSENAME(@num,2),'0',' '))),' ','0') set @num = 0.0123450000 SELECT PARSENAME(@num,2) + REPLACE(RTRIM(LTRIM(REPLACE(@num-PARSENAME(@num,2),'0',' '))),' ','0') 

रिटर्न 10.012345 और 0.012345 क्रमशः।

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

 select CAST(123.456700 as float),cast(cast(123.4567 as DECIMAL(9,6)) as float) 

सबसे आसान तरीका है फ़्लोट के रूप में मान को CAST और उसके बाद स्ट्रिंग डेटा प्रकार पर।

 CAST(CAST(123.456000 AS FLOAT) AS VARCHAR(100)) 

मेरे पास ऐसी ही समस्या थी xx0000,x00000,xxx000 जैसी संख्याओं से पीछे वाले शून्य को ट्रिम करने के लिए आवश्यक था

मैंनें इस्तेमाल किया:

 select LEFT(code,LEN(code)+1 - PATINDEX('%[1-Z]%',REVERSE(code))) from Tablename 

संहिता छंटनी की संख्या के साथ फ़ील्ड का नाम है मनाइए कि यह किसी और के लिए सहायक हो।

एक डीसीआईएमएल (9, 6) कॉलम सटीकता की हानि के बिना फ्लोट में बदल जाएगा, इसलिए CAST (… एएस फ्लोट)


@ एचएलजीईएम: यह कह रहा है कि फ्लोट नंबर संचय करने के लिए एक खराब विकल्प है और "फ्लोट का प्रयोग न करें" सही नहीं है – आपको सिर्फ अपने नंबर जानना होगा, जैसे तापमान मापन अच्छी तरह से फ़्लोट्स के रूप में जाना होगा

@ बांटीशचेव और @जापोंगस्की: एसक्यूएल संग्रहीत procs और फ़ंक्शंस के सामने उपसर्ग अब भी एक अच्छा विचार है, यदि आवश्यक न हो; जो लिंक आपने उल्लेख किया है वह केवल उन संग्रहित प्रक्रियाओं के लिए "sp_" उपसर्ग का उपयोग नहीं करने का निर्देश देता है जिन्हें आप उपयोग नहीं करना चाहिए, अन्य उपसर्ग ठीक हैं जैसे "usp_" या "spoby_"

संदर्भ: "6 या उससे कम महत्वपूर्ण दशमलव अंकों वाले सभी पूर्णांक को एक आईईईई 754 फ्लोटिंग-प्वाइंट मान में परिशुद्धता के बिना बदला जा सकता है": https://en.wikipedia.org/wiki/Single-precision_floating-point_format

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

 select Cast( Cast( (ROUND( 35.457514 , 2) *100) as Int) as float ) /100 

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

 select isnull(cast(floor(replace(rtrim(ltrim('999,999.0000')),',','')) as int),0)