• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

小写转大写金额

发布: 2007-7-02 11:08 | 作者: admin | 来源: | 查看: 14次 | 进入软件测试论坛讨论

领测软件测试网
在网上见到一个Oracle的版本的小写转大写金额的函数,感觉还不错现在把它转成SQL Server版本。

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

set @v_LowerStr = LTRIM(RTRIM(ROUND(@n_LowerMoney,2))) --四舍五入为指定的精度并删除数据左右空格
set @i_I = 1
set @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
set @v_UpperStr = @v_UpperPart + @v_UpperStr
set @i_I = @i_I + 1
end

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

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

if ( @#零@# = substring(@v_UpperStr,1,1))
begin
     set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if ( @#角@# = substring(@v_UpperStr,1,1))
begin
     set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if ( @#分@# = substring(@v_UpperStr,1,1))
begin
     set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if (@#整@# = substring(@v_UpperStr,1,1))
begin
     set @v_UpperStr = @#零元整@#
end
return @v_UpperStr
END

例子:

select dbo.L2U(56588441.111,0)

select dbo.L2U(00.00,0)

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网