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

2014-11-24 09:55:57 · 作者: · 浏览: 2
SQL小数位保留,如果不够保留位数,自动添加0
[sql] www.2cto.com
if OBJECT_ID('GetDecimal') is not null
drop function GetDecimal
go
create 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 @result=@value
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)-@index)
--如果小数部分长度大于保留小数位数
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<=@decimalPlace
begin
set @power=@power*0.1
set @k+=1
end
set @result=convert(varchar(20),@integerPart+convert(decimal(18,8),(@savePard+@power)))
while charindex('.',@result)>0 and right(@result,1)='0'
set @result=left(@result,len(@result)-1)
if right(@result,1)='.' set @result=@result+'0'
end
else --如果<5
set @result=@integerPart+@savePard
if charindex('.',@result)=0
begin
declare @m int=1
set @result+='.'
while @m<=@decimalPlace
begin
set @result+='0'
set @m+=1
end
end
else
set @result=substring(@result,1,charindex('.',@result)+1+@decimalPlace)