Oracle

详解Oracle中数字与大写交换

日期:2015/6/28来源: IT猫扑网

对于数字大小写的转换,也是有一定中国特色的东西。但是在账务报表中,我们还是需要有这样的功能的。今天写了一个将数字金额转化为大写的函数。

功能:将任意长度的数字金额转化为大写。最低位为圆或角时,后面加"整";为"分"时不加"整"。

说明:小数点后保留两位。超过两位的部分被截断。

代码:

  1. PL/SQL 代码  
  2. Create Or Replace Function Money2Chinese(Money In Number) Return Varchar2 Is 
  3.   strYuan Varchar2(150);  
  4.   strYuanFen    Varchar2(152);  
  5.   numLenYuan    Number;  
  6.   numLenYuanFen Number;  
  7.   strRstYuan    Varchar2(600);  
  8.   strRstFen     Varchar2(200);  
  9.   strRst  Varchar2(800);  
  10.   Type typeTabMapping Is Table Of Varchar2(2) Index By Binary_Integer;  
  11.   tabNumMapping  typeTabMapping;  
  12.   tabUnitMapping typeTabMapping;  
  13.   numUnitIndex   Number;  
  14.   i  Number;  
  15.   j  Number;  
  16.   charCurrentNum Char(1);  
  17. Begin 
  18.   If Money Is Null Then 
  19.     Return Null;  
  20.   End If;  
  21.   strYuan := TO_CHAR(FLOOR(Money));  
  22.   If strYuan = '0' Then 
  23.     numLenYuan := 0;  
  24.     strYuanFen := lpad(TO_CHAR(FLOOR(Money * 100)), 2, '0');  
  25.   Else 
  26.     numLenYuan := length(strYuan);  
  27.     strYuanFen := TO_CHAR(FLOOR(Money * 100));  
  28.   End If;  
  29.   If strYuanFen = '0' Then 
  30.     numLenYuanFen := 0;  
  31.   Else 
  32.     numLenYuanFen := length(strYuanFen);  
  33.   End If;  
  34.   If numLenYuan = 0 Or numLenYuanFen = 0 Then 
  35.     strRst := '零圆整';  
  36.     Return strRst;  
  37.   End If;  
  38.   tabNumMapping(0) := '零';  
  39.   tabNumMapping(1) := '壹';  
  40.   tabNumMapping(2) := '贰';  
  41.   tabNumMapping(3) := '叁';  
  42.   tabNumMapping(4) := '肆';  
  43.   tabNumMapping(5) := '伍';  
  44.   tabNumMapping(6) := '陆';  
  45.   tabNumMapping(7) := '柒';  
  46.   tabNumMapping(8) := '捌';  
  47.   tabNumMapping(9) := 

相关文章

相关下载

网友评论

我要评论...
    没有更早的评论了
    取消