当前位置: 代码迷 >> SQL >> SQL 小数位保存,如果不够保留位数,自动添加0
  详细解决方案

SQL 小数位保存,如果不够保留位数,自动添加0

热度:79   发布时间:2016-05-05 12:53:45.0
SQL 小数位保留,如果不够保留位数,自动添加0
if OBJECT_ID('GetDecimal') is not null	drop function GetDecimalgocreate function [dbo].[GetDecimal](	@value varchar(20),   --处理的值	@decimalPlace int     --小数位 ) returns varchar(20)as /***************************************--功能:小数位保留 如果保留的小数位是0,自动查找非0数字--创建人:zhujt--创建日期:2012-11-22 10:11:09***************************************/begin	declare @result varchar(20)    --显示结果 		if @value is not null		begin			--处理的值含有'L'			if charindex('L',@value)>0				set @result=cast(convert(decimal(18,8),replace(@value,'L',''))/2 as varchar)			--处理的值含有'e'			else if charindex('e',@value)>0 or charindex('E',@value)>0				set @result=cast(convert(decimal(18,8),convert(float,@value)) as varchar)			else set @[email protected]						declare @index int,				--小数点位置 					@integerPart varchar(10),--整数部分					@decimalPart varchar(10)--小数部分			--小数点位置 			set @index=charindex('.',@result)			--处理的值带有小数			if @index>0				begin					--获取整数部分					set @integerPart=substring(@result,1,@index)					--获取小数部分					set @decimalPart=substring(@result,@index+1,len(@result)[email protected])					--如果小数部分长度大于保留小数位数					if len(@decimalPart)>@decimalPlace 						begin							declare @savePard float --保留部分    							set @savePard=convert(float,'0.'+substring(@decimalPart,1,@decimalPlace))							if @savePard>0 --保留部分>0								begin 									if convert(int,substring(@decimalPart,@decimalPlace+1,1))>=5 --如果下一位≥5										begin											declare @k int=1,        --下标													@power float=1 --平方																						while @k<[email protected]												begin													set @[email protected]*0.1													set @k+=1												end																						set @result=convert(varchar(20),@integerPart+convert(decimal(18,8),(@[email protected]))) 											while charindex('.',@result)>0 and right(@result,1)='0'  												set @result=left(@result,len(@result)-1)   											if right(@result,1)='.' set @[email protected]+'0'										end 									else --如果<5										set @[email protected][email protected]																		if charindex('.',@result)=0										begin											declare @m int=1											set @result+='.'											while @m<[email protected]												begin													set @result+='0'													set @m+=1												end										end									else 										set @result=substring(@result,1,charindex('.',@result)[email protected])																	end							else if @savePard=0--保留部分=0								begin									declare @intPos int=0, -->0的数的位置											@next int,     --下一位的值											@n int=1,      --循环变量											@power1 float=1  --平方 									while @intPos<=len(@decimalPart)										begin											set @intPos+=1											if substring(@decimalPart,@intPos,1)<>'0' 												begin													set @next=substring(@decimalPart,@intPos+1,1)													break												end										end																		set @savePard=convert(float,'0.'+substring(@decimalPart,1,@intPos))									if @next>=5										begin 											while @n<[email protected]												begin													set @[email protected]*0.1													set @n+=1												end																							set @result=convert(varchar(20),@integerPart+convert(decimal(18,8),(@[email protected]))) 										end									else 										set @result=convert(varchar(20),@integerPart+convert(decimal(18,8),@savePard))																			while charindex('.',@result)>0 and right(@result,1)='0'  										set @result=left(@result,len(@result)-1)   									if right(@result,1)='.' set @[email protected]+'0'								end						end					else if len(@decimalPart)<@decimalPlace --如果小数部分<保留小数位数						begin							declare @j int=1 							while @j<[email protected](@decimalPart)								begin									set @decimalPart+='0'									set @j+=1								end							set @[email protected][email protected]						end 				end			else --如果没有小数位				begin					set @result+='.'					declare @i int=1					while @i<= @decimalPlace 						begin							set @result+='0'							set @i+=1						end				end  		end	else set @[email protected]	return @resultend

  相关解决方案