• irport报表,把数字金额转换成大写人民币金额


    1、编写oracle函数

      1 CREATE OR REPLACE Function MoneyToChinese(Money In Number) Return Varchar2 Is
      2   strYuan       Varchar2(150);
      3   strYuanFen    Varchar2(152);
      4   numLenYuan    Number;
      5   numLenYuanFen Number;
      6   strRstYuan    Varchar2(600);
      7   strRstFen     Varchar2(200);
      8   strRst        Varchar2(800);
      9   Type typeTabMapping Is Table Of Varchar2(2) Index By Binary_Integer;
     10   tabNumMapping  typeTabMapping;
     11   tabUnitMapping typeTabMapping;
     12   numUnitIndex   Number;
     13   i              Number;
     14   j              Number;
     15   charCurrentNum Char(1);
     16 Begin
     17   If Money Is Null Then
     18     Return Null;
     19   End If;
     20   strYuan := TO_CHAR(FLOOR(Money));
     21   If strYuan = '0' Then
     22     numLenYuan := 0;
     23     strYuanFen := lpad(TO_CHAR(FLOOR(Money * 100)), 2, '0');
     24   Else
     25     numLenYuan := length(strYuan);
     26     strYuanFen := TO_CHAR(FLOOR(Money * 100));
     27   End If;
     28   If strYuanFen = '0' Then
     29     numLenYuanFen := 0;
     30   Else
     31     numLenYuanFen := length(strYuanFen);
     32   End If;
     33   If numLenYuan = 0 Or numLenYuanFen = 0 Then
     34     strRst := '零元整';
     35     Return strRst;
     36   End If;
     37   tabNumMapping(0) := '';
     38   tabNumMapping(1) := '';
     39   tabNumMapping(2) := '';
     40   tabNumMapping(3) := '';
     41   tabNumMapping(4) := '';
     42   tabNumMapping(5) := '';
     43  tabNumMapping(6) := '';
     44   tabNumMapping(7) := '';
     45   tabNumMapping(8) := '';
     46   tabNumMapping(9) := '';
     47   tabUnitMapping(-2) := '';
     48   tabUnitMapping(-1) := '';
     49   tabUnitMapping(1) := '';
     50   tabUnitMapping(2) := '';
     51   tabUnitMapping(3) := '';
     52   tabUnitMapping(4) := '';
     53   tabUnitMapping(5) := '';
     54   tabUnitMapping(6) := '';
     55   tabUnitMapping(7) := '';
     56   tabUnitMapping(8) := '';
     57   tabUnitMapping(9) := '亿';
     58   For i In 1 .. numLenYuan Loop
     59     j            := numLenYuan - i + 1;
     60     numUnitIndex := Mod(i, 8);
     61     If numUnitIndex = 0 Then
     62       numUnitIndex := 8;
     63     End If;
     64     If numUnitIndex = 1 And i > 1 Then
     65       strRstYuan := tabUnitMapping(9) || strRstYuan;
     66     End If;
     67     charCurrentNum := substr(strYuan, j, 1);
     68     If charCurrentNum <> 0 Then
     69       strRstYuan := tabNumMapping(charCurrentNum) ||
     70                     tabUnitMapping(numUnitIndex) || strRstYuan;
     71     Else
     72       If (i = 1 Or i = 5) Then
     73         If substr(strYuan, j - 3, 4) <> '0000' Then
     74           strRstYuan := tabUnitMapping(numUnitIndex) || strRstYuan;
     75         End If;
     76       Else
     77         If substr(strYuan, j + 1, 1) <> '0' Then
     78           strRstYuan := tabNumMapping(charCurrentNum) || strRstYuan;
     79         End If;
     80       End If;
     81     End If;
     82   End Loop;
     83   For i In -2 .. -1 Loop
     84     j              := numLenYuan - i;
     85     charCurrentNum := substr(strYuanFen, j, 1);
     86     If charCurrentNum <> '0' Then
     87       strRstFen := tabNumMapping(charCurrentNum) || tabUnitMapping(i) ||
     88                    strRstFen;
     89     End If;
     90   End Loop;
     91   If strRstYuan Is Not Null Then
     92     strRstYuan := strRstYuan || '';
     93   End If;
     94   If strRstFen Is Null Then
     95     strRstYuan := strRstYuan || '';
     96   Elsif length(strRstFen) = 2 And substr(strRstFen, 2) = '' Then
     97     strRstFen := strRstFen || '';
     98   End If;
     99   strRst := strRstYuan || strRstFen;
    100   --strRst := Replace(strRst, '亿零', '亿');
    101   --strRst := Replace(strRst, '万零', '万');
    102   Return strRst;
    103 End MoneyToChinese; 

    注:如需测试该函数,请复制到Oracle数据库中,右击函数名“MoneyToChinese”,选择“test” 进行测试,输入你想要的金额。

    2、在irport的Database里面写查询语句调用MoneyToChinese函数

    小结:

    (SELECT moneytochinese((select sum(sod.ACTUAL_UNIT_PRICE * sod.ACTUAL_QUANTITY) from SALE_ORDER_DETAIL sod where sod.sale_order_no = oci.sell_order_no)) FROM dual) as majuscule_price
    其中moneytochinese是函数名。sum(sod.ACTUAL_UNIT_PRICE * sod.ACTUAL_QUANTITY) 是总金额,加工数量*单价的和。

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:http://www.cnblogs.com/dshore123/p/8033624.html

    版权声明:欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    线程执行器(一)
    修改锁的公平性
    Spark学习视频整合
    使用读写锁实现同步数据访问
    使用锁实现同步
    使用工厂类创建线程
    线程的分组
    android手机状态解释,比方android.os.Build.VERSION.SDK
    Android-Dalvik指令集
    selenium使用Xpath定位之完整篇
  • 原文地址:https://www.cnblogs.com/dshore123/p/8033624.html
Copyright © 2020-2023  润新知