11,850
社区成员




--建个函数
create function [dbo].[fn_charTodecimal](@str varchar(50))
returns decimal(19,6)
as
begin
return CAST(
cast(LEFT(@str,CHARINDEX('E',@str)-1) as decimal(19,6))*
case when cast(substring(@str,CHARINDEX('E',@str)+1,3) as int)>0 then
cast(LEFT('100000000000000',cast(substring(@str,CHARINDEX('E',@str)+1,3) as int)) as int)
else 1.0/cast(LEFT('100000000000000',1+-1*cast(substring(@str,CHARINDEX('E',@str)+1,3) as int)) as int)
end as decimal(19,6))
end
--调用
select dbo.fn_charTodecimal('-12.3422E-1')
---1.234220
declare @str varchar(50)
select @str='+1.590759E+02'
select CAST(
cast(LEFT(@str,CHARINDEX('E',@str)-1) as decimal(19,6))*
case when cast(substring(@str,CHARINDEX('E',@str)+1,3) as int)>0 then
cast(LEFT('100000000000000',cast(substring(@str,CHARINDEX('E',@str)+1,3) as int)) as int)
else 1.0/cast(LEFT('100000000000000',1+-1*cast(substring(@str,CHARINDEX('E',@str)+1,3) as int)) as int)
end as decimal(19,6))
--15.907590
select @str='+159.0759E-02'
select CAST(
cast(LEFT(@str,CHARINDEX('E',@str)-1) as decimal(19,6))*
case when cast(substring(@str,CHARINDEX('E',@str)+1,3) as int)>0 then
cast(LEFT('100000000000000',cast(substring(@str,CHARINDEX('E',@str)+1,3) as int)) as int)
else 1.0/cast(LEFT('100000000000000',1+-1*cast(substring(@str,CHARINDEX('E',@str)+1,3) as int)) as int)
end as decimal(19,6))
--1.590759
SELECT CAST(1.590759E+01 AS DECIMAL(19,6)) RES
RES
---------------------------------------
15.907590
(1 row(s) affected)