前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >金额大写转小写SQL

金额大写转小写SQL

原创
作者头像
用户7108768
修改2021-09-24 10:35:56
1.6K0
修改2021-09-24 10:35:56
举报
代码语言:javascript
复制
Create Or Replace Function Money2Chinese(Money In Number) Return Varchar2 Is
strYuan       Varchar2(150);
strYuanFen    Varchar2(152);
numLenYuan    Number;
numLenYuanFen Number;
strRstYuan    Varchar2(600);
strRstFen     Varchar2(200);
strRst        Varchar2(800);
Type typeTabMapping Is Table Of Varchar2(2) Index By Binary_Integer;
tabNumMapping  typeTabMapping;
tabUnitMapping typeTabMapping;
numUnitIndex   Number;
i              Number;
j              Number;
charCurrentNum Char(1);
Begin
If Money Is Null Then

Return Null;

 
End If;
strYuan := TO_CHAR(FLOOR(Money));
If strYuan = '0' Then

numLenYuan := 0;

strYuanFen := lpad(TO_CHAR(FLOOR(Money * 100)), 2, '0');

 
Else

numLenYuan := length(strYuan);

strYuanFen := TO_CHAR(FLOOR(Money * 100));

 
End If;
If strYuanFen = '0' Then

numLenYuanFen := 0;

 
Else

numLenYuanFen := length(strYuanFen);

 
End If;
If numLenYuan = 0 Or numLenYuanFen = 0 Then

strRst := '零圆整';

Return strRst;

 
End If;
tabNumMapping(0) := '零';
tabNumMapping(1) := '壹';
tabNumMapping(2) := '贰';
tabNumMapping(3) := '叁';
tabNumMapping(4) := '肆';
tabNumMapping(5) := '伍';
tabNumMapping(6) := '陆';
tabNumMapping(7) := '柒';
tabNumMapping(8) := '捌';
tabNumMapping(9) := '玖';
tabUnitMapping(-2) := '分';
tabUnitMapping(-1) := '角';
tabUnitMapping(1) := '';
tabUnitMapping(2) := '拾';
tabUnitMapping(3) := '佰';
tabUnitMapping(4) := '仟';
tabUnitMapping(5) := '万';
tabUnitMapping(6) := '拾';
tabUnitMapping(7) := '佰';
tabUnitMapping(8) := '仟';
tabUnitMapping(9) := '亿';
For i In 1 .. numLenYuan Loop

j            := numLenYuan - i + 1;

numUnitIndex := Mod(i, 8);

If numUnitIndex = 0 Then

  numUnitIndex := 8;

End If;

If numUnitIndex = 1 And i > 1 Then

  strRstYuan := tabUnitMapping(9) || strRstYuan;

End If;

charCurrentNum := substr(strYuan, j, 1);

If charCurrentNum <> 0 Then

  strRstYuan := tabNumMapping(charCurrentNum) ||

                tabUnitMapping(numUnitIndex) || strRstYuan;

Else

  If (i = 1 Or i = 5) Then

    If substr(strYuan, j - 3, 4) <> '0000' Then

      strRstYuan := tabUnitMapping(numUnitIndex) || strRstYuan;

    End If;

  Else

    If substr(strYuan, j + 1, 1) <> '0' Then

      strRstYuan := tabNumMapping(charCurrentNum) || strRstYuan;

    End If;

  End If;

End If;

 
End Loop;
For i In -2 .. -1 Loop

j              := numLenYuan - i;

charCurrentNum := substr(strYuanFen, j, 1);

If charCurrentNum <> '0' Then

  strRstFen := tabNumMapping(charCurrentNum) || tabUnitMapping(i) ||

               strRstFen;

End If;

 
End Loop;
If strRstYuan Is Not Null Then

strRstYuan := strRstYuan || '圆';

 
End If;
If strRstFen Is Null Then

strRstYuan := strRstYuan || '整';

 
Elsif length(strRstFen) = 2 And substr(strRstFen, 2) = '角' Then

strRstFen := strRstFen || '整';

 
End If;
strRst := strRstYuan || strRstFen;
--strRst := Replace(strRst, '亿零', '亿');
--strRst := Replace(strRst, '万零', '万');
Return strRst;
End Money2Chinese;</pre> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com