首页 >> 电子商务大学 >> 网站建设班 >> NET区
 
小写转大写金额[SQL SERVER]



 原作在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




1
 
电子商务大学版权与免责声明:

 
凡本网注明“来源:35DX”的所有作品,版权均属于电子商务大学,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:电子商务大学”。违反上述声明者,本网将追究其相关法律责任。
凡本网注明“来源:XXX(非电子商务大学)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,同时,本站转载并无任何商业目的。
如因作品内容、版权和其它问题需要同本网联系的,请在30日内进行。
联系方式:电子商务大学 webMaster@35dx.com