এসকিউএল সার্ভারের দশমিক থেকে পিছনে শূন্যগুলি সরিয়ে দিন


85

আমার একটি কলাম রয়েছে DECIMAL(9,6)অর্থাৎ এটি 999,123456 এর মতো মানগুলিকে সমর্থন করে।

তবে আমি যখন 123,4567 এর মতো ডেটা .োকান তখন তা 123,456700 হয়ে যায়

কীভাবে সেই জিরো সরিয়ে ফেলবেন?


দয়া করে @ আন্দোমারের উত্তরের সঠিক উত্তরটি পরিবর্তন করুন
ডাঙালগ

@ ডাঙ্গলগ: আমি দৃ strongly়ভাবে বিশ্বাস করি যে এটি অবশ্যই উপস্থাপনা স্তরে করা উচিত। এজন্য আমি কখনই গৃহীত উত্তর পরিবর্তন করি নি। তবে আরও বিবেচনার পরেও, আমি মনে করি যে সম্প্রদায়টি পরিষ্কারভাবে নির্দেশিত হয়েছে যে উত্তরটি সবচেয়ে ভাল।
আবাতিশ শেভ

উত্তর:


147

একটি decimal(9,6)দোকানে কমা ডান দিকে 6 টি সংখ্যা। ট্রেলিং শূন্যগুলি প্রদর্শন করা বা না করা কোনও ফর্ম্যাট সিদ্ধান্ত, সাধারণত ক্লায়েন্টের পক্ষেই প্রয়োগ করা হয়।

কিন্তু SSMS ফরম্যাটের যেহেতু floatশূন্য trailing ছাড়া, আপনি কাস্ট করে শূণ্যসমূহ trailing অপসারণ করতে পারেন decimalএকটি থেকে float:

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

মুদ্রণ:

123.456700  123,4567

(আমার দশমিক বিভাজক একটি কমা, তবুও এসএসএমএস বিন্যাসের সাথে দশমিক দশমিক বিন্যাস করে App দৃশ্যত একটি পরিচিত সমস্যা ))


8
+1 আমি ভেবেছিলাম ভাসতে রূপান্তর ফলাফলের সাথে কিছুটা অসম্পূর্ণতার পরিচয় দেবে তবে এটি পুরোপুরি সূক্ষ্মভাবে কাজ করে বলে মনে হচ্ছে।
মার্টিন স্মিথ

4
এই পদ্ধতির একটি খারাপ দিক হ'ল আপনি যদি "2.0" দিয়ে শুরু করেন তবে এটি "2" তে পরিণত হবে into প্রশ্নটি জিজ্ঞাসা করা ব্যক্তির পক্ষে এটি সম্ভবত ঠিক আছে তবে দশমিকের পরে আমার আর কোনও শূন্যের জিরো না রেখে দশমিকের পরে একক শূন্য রাখতে সক্ষম হওয়া দরকার। @ ব্যবহারকারী1959416 এর উত্তর এটি সমাধান করে।
মেসন জি জুইটি

6
সংখ্যার সঞ্চয় করার জন্য সাধারণভাবে প্লাস ফ্লোট একটি খুব দুর্বল পছন্দ। এটি সঠিক ধরণের না হওয়ায় আপনি গোলাকার ত্রুটিগুলি পেয়ে যাবেন। ভাসা কখনও ব্যবহার করবেন না।
এইচএলজিইএম

শূন্যগুলি অনুসরণ না করে বিন্যাসে ভাসমান সম্পর্কে মন্তব্যটি অত্যন্ত দরকারী
সানজিভ জীবন

দশমিকের স্কেল এবং নির্ভুলতা একটি ফ্লোটের চেয়ে বেশি হতে পারে এবং তাই এই ক্ষেত্রে উত্তর হতে পারে না এমন ক্ষেত্রে (17 টিরও বেশি সংখ্যার উল্লেখযোগ্যতার সাথে) এই উত্তরটি কার্যকর হয় না তা কি আমি ভেবে সঠিক?
Caius Jard

32

আপনি FORMAT()ফাংশনটি ব্যবহার করতে পারেন (এসকিএলএজুরি এবং এসকিএল সার্ভার 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 বৃহত্তর ( 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'

এছাড়াও, ডকুমেন্টেশন অনুযায়ী নোট করুন :

ফরমেট .NET ফ্রেমওয়ার্ক কমন ল্যাঙ্গুয়েজ রানটাইম (সিএলআর) এর উপস্থিতির উপর নির্ভর করে। এই ফাংশনটি মুছে ফেলা হবে না কারণ এটি সিএলআর উপস্থিতির উপর নির্ভর করে। সিএলআর প্রয়োজন এমন একটি ফাংশন রিমোট করা দূরবর্তী সার্ভারে ত্রুটির কারণ হতে পারে।

স্ক্যালএজুরেতেও কাজ করে।


আমার উদ্দেশ্যগুলির জন্য, আমি জি 8 এর একটি ফর্ম্যাট স্ট্রিং আমার নম্বরটিকে "1e-08" হিসাবে ফর্ম্যাট করেছিলাম যা আমার পরে ছিল না। এই উত্তরটি আমাকে এমন একের দিকে নিয়ে গিয়েছিল যা আমি ব্যবহার করতে পারি
Caius Jard

18
SELECT CONVERT(DOUBLE PRECISION, [ColumnName])

এসকিউএল সার্ভার ২০০৮ এবং
তারপরে

সংখ্যাটি "123.10705000000" এর মতো হলে কী ঘটে? আমি সিলেক্ট কনভার্ট দিয়ে চেষ্টা করেছি (ডাবল প্রেসিশন, 123.1070500000000) তবে এটি আমাকে উত্তর হিসাবে "123.107" দেয়। এবং আমি "123.10705" আউটপুট হিসাবে চাই? অন্য কোন উপায় আছে? আমি CHARINDEX ব্যবহার করতে চাই না।
ভাভিকা জিম্বার

16

আমি ভাসা ভাসতে নারাজ কারণ আমার সংখ্যা দশমিক যে ভাসমান উপস্থাপন করতে পারে তার চেয়ে বেশি সংখ্যার হওয়ার সম্ভাবনা রয়েছে

FORMAT যখন একটি স্ট্যান্ডার্ড। নেট ফর্ম্যাট স্ট্রিং 'জি 8' ব্যবহার করা হয় তখন খুব অল্প দশমিক (যেমন 1e-08) ক্ষেত্রে বৈজ্ঞানিক স্বরলিপি ফিরে আসে যা অনুপযুক্তও ছিল না

একটি কাস্টম বিন্যাসের স্ট্রিং ব্যবহার করে ( https://docs.microsoft.com/en-us/dotnet/standard/base-tyype/custom-numeric-format-strings ) আমি যা চেয়েছিলাম তা অর্জন করতে পেরেছি:

DECLARE @n DECIMAL(9,6) =1.23;
SELECT @n
--> 1.230000
SELECT FORMAT(@n, '0.######')
--> 1.23

আপনি যদি চান যে আপনার নম্বরটিতে কমপক্ষে একটি অনুমান শূন্য থাকে, সুতরাং 2.0 ২ হয় না, তবে একটি বিন্যাসের স্ট্রিং ব্যবহার করুন 0.0#####

দশমিক বিন্দু স্থানীয়করণ করা হয়, সুতরাং যে সংস্কৃতিগুলি দশমিক বিভাজক হিসাবে কমা ব্যবহার করে সেখানে একটি কমা আউটপুট আসবে the হয়

অবশ্যই, এটি ডাটা লেয়ারকে ফর্ম্যাটিং করার হতাশার অনুশীলন (তবে আমার ক্ষেত্রে অন্য কোনও স্তর নেই; ব্যবহারকারী আক্ষরিক অর্থে একটি সঞ্চিত প্রক্রিয়া চালাচ্ছেন এবং ফলাফলটি একটি ইমেলটিতে রেখেছেন: /)


হ্যাঁ, এটিই একমাত্র সমাধান যা বৈজ্ঞানিক স্বরলিপি এড়ানোর সময় দশমিক বিভাজকের ডানদিকে সংখ্যার উপর সম্পূর্ণ নিয়ন্ত্রণের অনুমতি দেয়। এই সমাধানটির একমাত্র সমস্যা হ'ল ফর্ম্যাট সত্যই (!) ধীর। (এখনও .. এসকিউএল ২০১৯-এ)
টোর

7
SELECT REVERSE(ROUND(REVERSE(2.5500),1))

মুদ্রণ:

2.55

4
এই পদ্ধতিটি দুর্দান্ত কারণ এটি যদি কেবল একটি শূন্য থাকে তবে এটি একটি পিছনে শূন্যটি ছেড়ে যাবে। সুতরাং 2.5500 2.5 এর পরিবর্তে 2.55 দেয়, এবং 2.000 2-র পরিবর্তে ২.০ ফেরত দেয় আপনি যখন কোনও যানবাহনে ইঞ্জিনের আকারগুলি ফর্ম্যাট করছেন তখন তার জন্য দুর্দান্ত ...
ম্যাসন জি জহুইটি

4
@ ম্যাসনজি.জুইটি আমার সন্দেহ আছে যে এটি 232.33220003200 উদাহরণস্বরূপ দশমিক পয়েন্টের পরে আরও কিছু অঙ্কের সাথে কিছু দশমিকের সাথে কাজ করবে: উদাহরণস্বরূপ: -)
পেয়েছি

@ gotqn ভাল পয়েন্ট, এটি অবশ্যই ব্যর্থ হয়। তবে, আমাদের নির্দিষ্ট ব্যবহারের ক্ষেত্রে (গাড়িতে ইঞ্জিনের আকারগুলি ফর্ম্যাট করা), এটি পুরোপুরি কাজ করে। :)
ম্যাসন জি। ঝুইটি

যেমন @ gotqn বলেছে .. সংখ্যাটি দীর্ঘ হলে এটি বাগিচা হয়
অফার

এটি 0.56000 এর মতো সংখ্যার জন্য ঠিক কাজ করে না। এটির ফলন হবে 56 Funny মজার
গুঞ্জন শাক্য


4

এটা চেষ্টা কর :

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

20.55 দেয়


4
রিপ্লেস (ট্রিম (রিপ্লেস (20.00, "0", "")), "", "0") আপনাকে পিছনের দিকে ছেড়ে দেয়। => "20."
কিথ সিরমন্স

এটি আমার ক্ষেত্রে পুরোপুরি প্রযোজ্য এবং এটি সহজতম সমাধান বলে মনে হচ্ছে। থাম্ব ও ভোট দিন!
ওক_3260548

ভাসমান রূপান্তর না করে দুর্দান্ত সমাধান! এক ছোটখাট সমস্যা বিক্ষোভ 0.000ওঠে .। এখানে SELECT REPLACE(RTRIM(REPLACE(20.5500, "0", " ")), " ", "0")কেবলমাত্র পিছনের জিরোগুলি ছাঁটাই করার ফিক্সটি রয়েছে
উইলসন

2

আমার অনুরূপ সমস্যা ছিল, তবে দশমিক বিন্দুটি সরিয়ে ফেলতে হবে যেখানে কোন দশমিক উপস্থিত ছিল না, এখানে আমার সমাধানটি ছিল যা দশমিক दशকটি তার উপাদানগুলিতে বিভক্ত করে এবং দৈর্ঘ্যের দশমিক বিন্দুর স্ট্রিং থেকে যে অক্ষরের সংখ্যাটি গ্রহণ করে তা বেস করে দেয় ভগ্নাংশ উপাদান (CASE ব্যবহার না করে)। বিষয়গুলি আরও আকর্ষণীয় করে তুলতে, আমার নম্বরটি দশমিক ছাড়াই ভাসা হিসাবে সংরক্ষণ করা হয়েছিল।

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') 

ফলাফলটি বেদনাদায়ক, আমি জানি, তবে উপরের উত্তরগুলি থেকে অনেক সাহায্য নিয়ে আমি সেখানে পৌঁছেছি।


2

নির্ভুলতার ক্ষতি হবার সম্ভাবনার কারণে রূপান্তর করার আগে সেরা উপায়টি ফ্লোট বা অর্থের সাথে রূপান্তর করা নয় । সুতরাং নিরাপদ উপায়গুলি এরকম কিছু হতে পারে:

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

যেখানে @ মূল্য কোনও দশমিক (x, y) হতে পারে


@ বাতিষেভ, এফএন_এটি এসএলএল ফাংশনগুলির জন্য পছন্দসই উপসর্গ, স্ট্যান্ডার্ড কোডিং এবং নামকরণ কনভেনশন পাশাপাশি সেরা অনুশীলনগুলিতে উপসর্গ ব্যবহৃত হয়, আমরা আমাদের উপসর্গগুলি কাস্টমাইজ করতে পারি, তবে সেরা অভ্যাসগুলির জন্য আমরা sp_সঞ্চিত পদ্ধতিতে, fn_ফাংশনগুলির tblজন্য, টেবিলের জন্য ব্যবহার করি এবং তাই চালু ... এটি প্রয়োজন হয় না তবে এটি আমাদের ডাটাবেসগুলি সজ্জিত করার জন্য সেরা অভ্যাস।
জাপাজডিভিনো

@ জাপংস্কি: দুঃখিত, তবে না। একেবারে উপসর্গের দরকার নেই। এটি আসলে সবচেয়ে খারাপ অনুশীলন। দেখুন msdn.microsoft.com/en-us/library/dd172115(v=vs.100).aspx sqlperformance.com/2012/10/t-sql-queries/sp_prefix dba.stackexchange.com/q/25348/3186 এবং আরও অনেক
আবাতিশেভ

@ বাতিষেভেভ, ওহ আমি দেখছি .. সুতরাং আমি আর আর স্কুলের শিক্ষাকে অনুসরণ করব না .. হাহা এলএল, যেহেতু আপনার লিঙ্কটি এমডএসএন থেকে এসেছে, এটির জন্য ধন্যবাদ, আমি এখন আমার সেরা অনুশীলনটি পরিবর্তন করব .. :)
জাপ্পডিভিনো ২

2

আমার অনুরূপ সমস্যা ছিল, পছন্দ মতো জিরোগুলি ট্রিম করতে হবে xx0000,x00000,xxx000

আমি ব্যবহার করতাম:

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

কোডটি ছাঁটাতে হবে এমন ক্ষেত্রের নাম। আশাকরি এটি কাউকে সাহায্য করবে।


আপনি যখন এসকিউএল সার্ভারের এমন একটি সংস্করণ ব্যবহার করছেন যা এই পুরানো যে আপনি এসকিউএল সার্ভারে ফ্রিমে ট্রিম বা ফর্ম্যাট ব্যবহার করতে পারবেন না তখন এই মন্তব্যটি ভাল কাজ করে।
ডেভিড পারভিন

এই উত্তর সহ আমি একটি সমস্যা পেয়েছি। যদি 'কোড' ক্ষেত্রের মান '10' এর মতো কিছু হয় তবে তা '1' এ ফিরে আসবে। সংখ্যাটি যদি '10 .00 'হয় তবে আমার মনে হয় এটি দশমিক বিন্দুটিকেও উপেক্ষা করে।
ডেভিড পারভিন

1

অন্য বিকল্প ...

আমি জানি না এটি কতটা দক্ষ তবে এটি কাজ করে বলে মনে হচ্ছে এবং ভাসমান পথে যায় না:

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

মাঝের লাইনটি পিছনের জায়গাগুলি থেকে সরে যায়, দশমিক সংখ্যা না থাকলে বাইরের দুটি বিন্দুটি সরিয়ে দেয়


1

আমার দশমিক দশকে ট্রেলিং শূন্যগুলি সরিয়ে ফেলতে হবে যাতে আমি কেবলমাত্র শীর্ষস্থানীয় শূন্যগুলির সাথে নির্দিষ্ট দৈর্ঘ্যের একটি স্ট্রিং আউটপুট করতে পারি

(যেমনঃ আমার 14 টি অক্ষর আউটপুট করা দরকার যাতে 142.023400 000000142.0234 হয়ে যায়),

আমি ব্যবহৃত parsename, reverseএবং cast as intচিহ্ন শূন্য মুছে ফেলার জন্য:

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

(তারপরে আমার শীর্ষস্থানীয় শূন্যগুলি পেতে আমি উপরের দৈর্ঘ্যের উপর ভিত্তি করে জিরোগুলির সঠিক সংখ্যাটি প্রতিলিপি করতে এবং এটি উপরের সামনের দিকে সংলগ্ন করতে পারি)

আমি এই কারো সাহায্য করে আশা করি।


@ প্রোটিগিউস যেহেতু 1 দশমিক পয়েন্ট রয়েছে তাই 2.5 স্ক্রিন <স্কেমা_নাম> এর মতো পড়ছে <<অবজেক্ট_নাম>। 2 প্যারামিটার 2 স্কিমার নাম দেয়, 1 এর দ্বিতীয় প্যারামিটারটি বস্তুর নাম দেয়। এটি সাধারণত PARSENAME ('dbo.TableName', 2) এর মতো dbo ফিরে আসতে বা PARSENAME ('dbo.TableName', 1) ব্যবহার করে টেবিলের নামটি ফিরে আসত।
আলী

হ্যালো .. আমি দেখতে পাচ্ছি আমার উপনামটি আপনার মন্তব্যে পতাকাঙ্কিত। আমি জানিনা কেন?
প্রাক্তন

২20 শে মে 2020-এ আপনি আমাকে যে সঠিক প্রশ্নটি জিজ্ঞাসা করেছিলেন তা হ'ল "পার্সনেম এখানে কাজ করার কথা কীভাবে ??? দুঃখিত, আপনাকে জবাব দিতে এত দিন লেগেছে।
আলী

1

টিএসকিউএলে শীর্ষস্থানীয় এবং অনুসরণীয় শূন্যগুলি অপসারণ করা সম্ভব

  1. স্ট্রিং না হয়ে এসআরটি টিএসকিউএল ফাংশনটি ব্যবহার করে স্ট্রিংয়ে রূপান্তর করুন

  2. নেতৃস্থানীয় এবং চলমান জিরো উভয়ই সরান

    SELECT REPLACE(RTRIM(LTRIM(REPLACE(AccNo,'0',' '))),' ','0') AccNo FROM @BankAccount
    
  3. ফোরামে আরও তথ্য ।


4
কিছুটা কুরুচিপূর্ণ তবে এই সংস্করণটি 'বাকী লোককে হত্যা করে।':REPLACE(RTRIM(REPLACE(REPLACE(RTRIM(REPLACE(X,'0',' ')),' ','0'),'.',' ')),' ','.')
ক্রিস বি

4
সাবধান থাকুন, সংখ্যাটি দশমিক না হলে এটি শূন্যগুলিও ছাঁটাবে। CHARINDEX ('।', @ সংখ্যা)! = 1 এটি পরীক্ষা করবে।
মুফ্লিক্স

আমার আগের দশমিক চেকটি ভুল। এখানে উত্তম: লেন নির্বাচন করুন (@Test) - লেন হিসাবে NumberOfCharacters ব্যাখ্যা করা ((@Test, 'একটি', '') প্রতিস্থাপন): tinyurl.com/o4fc8g7 এবং tinyurl.com/kgzkuqk
Muflix

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

0
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

এটি কি সংখ্যার মধ্যে 0 এর (জিরো) প্রতিস্থাপন করবে না? ভাবুন না প্রতিস্থাপনটি কেবল শেষের দিকে কাজ করে ...
এমটি কে

0

আমি বুঝতে পারি এটি একটি পুরানো পোস্ট তবে এসকিউএল সরবরাহ করতে চাই যা আমি এনেছি

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


0

সবচেয়ে সহজ উপায় হ'ল ফ্ল্যাট হিসাবে মানটি কাস্ট করা এবং তারপরে স্ট্রিং ডেটা টাইপ করা।

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

-1

এটা চেষ্টা কর:

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

আমি এখানে @ ব্যবহারকারী1959416 এর উত্তরটি বেশি পছন্দ করি কারণ এটি মান পরিবর্তন করে না। উদাহরণস্বরূপ, 2.5550 দিয়ে শুরু করে, আপনার পদ্ধতির ফলাফল 2.56 হয়, অন্যদিকে তাদের 2.5.5 ফেরৎ পাওয়া যায়।
মেসন জি জুইটি

-1

আমি জানি এই থ্রেডটি অনেক পুরানো তবে যারা এসকিউএল সার্ভার 2012 বা তার বেশি ব্যবহার করছেন না বা নিম্নলিখিত কারণে কাজ করে কোনও কারণে ফর্ম্যাট ফাংশন ব্যবহার করতে পারবেন না।

এছাড়াও, সংখ্যাটি 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 প্রদান করে।


-1

এটা চেষ্টা কর:

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

এইটি ফিরে 999999আসবে, ওপি পিছনের জিরোগুলি সরিয়ে দিতে বলছে।
জাপাজডিভিনো

-1

একটি ডেসিমাল (9,6) কলামটি নির্ভুলতার ক্ষতি ছাড়াই ফ্লোটে রূপান্তরিত হবে, সুতরাং ক্যাসেট (... এএস ফ্ল্যাট) কৌশলটি করবে।


@ এইচএলজিইএম: বলছেন যে নম্বরগুলি সংরক্ষণের জন্য ভাসা একটি দুর্বল পছন্দ এবং "কখনই ফ্লোট ব্যবহার করবেন না" সঠিক নয় - আপনাকে কেবল নিজের সংখ্যাগুলি জানতে হবে, উদাহরণস্বরূপ তাপমাত্রা পরিমাপটি ভাসা হিসাবে খুব ভাল হবে।

@ আবাতিষেভ এবং @ জাপাংস্কি: এসকিউএল সঞ্চিত প্রোকস এবং ফাংশনগুলির সামনে উপসর্গগুলি এখনও একটি ভাল ধারণা, যদি প্রয়োজন হয় না; আপনি যে লিঙ্কগুলি উল্লেখ করেছেন কেবলমাত্র সেগুলি সংরক্ষণ করা পদ্ধতিগুলির জন্য "sp_" উপসর্গটি ব্যবহার না করার নির্দেশ দেয় যা আপনার ব্যবহার করা উচিত নয়, অন্যান্য উপসর্গগুলি বেশ ভাল যেমন "usp_" বা "spb_"

তথ্যসূত্র: "6 বা তার চেয়ে কম দশমিক দশমিক সংখ্যা সহ সমস্ত পূর্ণসংখ্যা নির্ভুলতা না হারিয়ে একটি আইইইই 754 ফ্লোটিং-পয়েন্ট মানে রূপান্তর করা যেতে পারে": https://en.wikedia.org/wiki/Single-precision_floating-Point_format

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.