电脑技术学习

小写转大写金额

dn001
原作在SQL;2000中有一些问题。修正错误并在SQL;2000中运行通过。

/********************************************************
作者:(wleii165@yahoo.com)
版本:1.0
创建时间:20020227
修改时间:
功能:小写金额转换成大写
参数:n_LowerMoney;小写金额
;;v_TransType;种类;--;1:;directly;translate,;0:;read;it;in;words;
输出:大写金额
********************************************************/
CREATE;PROCEDURE;dbo.L2U;
(
@n_LowerMoney;numeric(15,2),
@v_TransType;int,
@RET;VARCHAR(200);output
)
;AS;
;;
Declare;@v_LowerStr;VARCHAR(200);--;小写金额;
Declare;@v_UpperPart;VARCHAR(200);
Declare;@v_UpperStr;VARCHAR(200);--;大写金额
Declare;@i_I;int

set;nocount;on

select;@v_LowerStr;=;LTRIM(RTRIM(STR(@n_LowerMoney,20,2)));--四舍五入为指定的精度并删除数据左右空格

select;@i_I;=;1
select;@v_UpperStr;=;''

while;(;@i_I;<=;len(@v_LowerStr))
begin
;;;;;;select;@v_UpperPart;=;case;substring(@v_LowerStr,len(@v_LowerStr);-;@i_I;+;1,1)
;;;;WHEN;;'.';THEN;;'元'
;;;;WHEN;;'0';THEN;;'零'
;;;;WHEN;;'1';THEN;;'壹'
;;;;WHEN;;'2';THEN;;'贰'
;;;;WHEN;;'3';THEN;;'叁'
;;;;WHEN;;'4';THEN;;'肆'
;;;;WHEN;;'5';THEN;;'伍'
;;;;WHEN;;'6';THEN;;'陆'
;;;;WHEN;;'7';THEN;;'柒'
;;;;WHEN;;'8';THEN;;'捌'
;;;;WHEN;;'9';THEN;;'玖'
;;;;END
;;+;
;;;;case;@i_I
;;;;WHEN;;1;;THEN;;'分'
;;;;WHEN;;2;;THEN;;'角'
;;;;WHEN;;3;;THEN;;''
;;;;WHEN;;4;;THEN;;''
;;;;WHEN;;5;;THEN;;'拾'
;;;;WHEN;;6;;THEN;;'佰'
;;;;WHEN;;7;;THEN;;'仟'
;;;;WHEN;;8;;THEN;;'万'
;;;;WHEN;;9;;THEN;;'拾'
;;;;WHEN;;10;;THEN;;'佰'
;;;;WHEN;;11;;THEN;;'仟'
;;;;WHEN;;12;;THEN;;'亿'
;;;;WHEN;;13;;THEN;;'拾'
;;;;WHEN;;14;;THEN;;'佰'
;;;;WHEN;;15;;THEN;;'仟'
;;;;WHEN;;16;;THEN;;'万'
;;;;ELSE;''
;;;;END
select;@v_UpperStr;=;@v_UpperPart;+;@v_UpperStr
select;@i_I;=;@i_I;+;1
end

--------print;;'//v_UpperStr;='+@v_UpperStr;+'//'

if;(;@v_TransType=0;)
begin
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零拾','零');
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零佰','零');
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零仟','零');
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零零零','零')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零零','零')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零角零分','整')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零分','整')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零角','零')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零亿零万零元','亿元')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'亿零万零元','亿元')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零亿零万','亿')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零万零元','万元')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'万零元','万元')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零亿','亿')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零万','万')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零元','元')
select;@v_UpperStr;=;REPLACE(@v_UpperStr,'零零','零')
end

--;对壹元以下的金额的处理;
if;(;substring(@v_UpperStr,1,1)='元';)
begin
;;;;;select;@v_UpperStr;=;substring(@v_UpperStr,2,(len(@v_UpperStr);-;1))
end

if;(substring(@v_UpperStr,1,1)=;'零')
begin
;;;;;select;@v_UpperStr;=;substring(@v_UpperStr,2,(len(@v_UpperStr);-;1))
end

if;(substring(@v_UpperStr,1,1)='角')
begin
;;;;;select;@v_UpperStr;=;substring(@v_UpperStr,2,(len(@v_UpperStr);-;1))
end

if;(;substring(@v_UpperStr,1,1)='分')
begin
;;;;;select;@v_UpperStr;=;substring(@v_UpperStr,2,(len(@v_UpperStr);-;1))
end

if;(substring(@v_UpperStr,1,1)='整')
begin
;;;;;select;@v_UpperStr;=;'零元整'
end

select;@ret=@v_UpperStr

GO

调用过程:

declare;@ret;varchar(200)

exec;L2U;567983.897,1,@ret;output

select;@ret