0
点赞
收藏
分享

微信扫一扫

人民币小写转大写 oracle函数

春意暖洋洋 2022-02-24 阅读 59
oraclesql

function fn_getupperrmb(money IN number)
    return varchar2 is
  TYPE MAPPING IS TABLE OF VARCHAR2(6) INDEX BY BINARY_INTEGER;
  UPPERDW MAPPING;
  DW MAPPING;
  STRYUAN VARCHAR2(100);
  STRFEN VARCHAR2(100);
  STR_RES VARCHAR2(100);
  LENYUAN NUMBER;
  J NUMBER;
  WS NUMBER;--位数
  SZ VARCHAR2(3);--数字
  YUAN_RES VARCHAR2(100);
  FEN_RES VARCHAR2(100);
begin
  If money Is Null Then
    Return Null;
  End If;
  UPPERDW(0) := '零';
  UPPERDW(1) := '壹';
  UPPERDW(2) := '贰';
  UPPERDW(3) := '叁';
  UPPERDW(4) := '肆';
  UPPERDW(5) := '伍';
  UPPERDW(6) := '陆';
  UPPERDW(7) := '柒';
  UPPERDW(8) := '捌';
  UPPERDW(9) := '玖';
  DW(-2) := '分';
  DW(-1) := '角';
  DW(1) := '';
  DW(2) := '拾';
  DW(3) := '佰';
  DW(4) := '仟';
  DW(5) := '万';
  DW(6) := '拾';
  DW(7) := '佰';
  DW(8) := '仟';
  DW(9) := '亿';
  STRYUAN :=TO_CHAR(FLOOR(MONEY));
  IF STRYUAN = '0'  
    THEN  
      LENYUAN :=0;
      STRFEN :=LPAD(TO_CHAR(FLOOR(MONEY*100)),2,'0');
    ELSE
      LENYUAN :=LENGTH(STRYUAN);
      STRFEN :=TO_CHAR(FLOOR(MONEY*100));
  END IF;
  If  STRFEN = '00' Then
    STR_RES := '零圆整';
    return STR_RES; 
  End If;
  -----处理整数
   FOR I IN 1..LENYUAN
     LOOP
       J :=LENYUAN - I + 1;
       SZ :=SUBSTR(STRYUAN,J,1);
       WS:=MOD(I,8);
       IF WS =1 AND I>1
         THEN YUAN_RES:=DW(9)||YUAN_RES;
       END IF;
       IF WS = 0
         THEN 
           WS :=8;
       END IF;
       IF SZ<>'0' 
         THEN
          YUAN_RES := UPPERDW(SZ)||DW(WS)||YUAN_RES;
         ELSE
          IF WS = 5 or WS = 1 THEN
             IF SUBSTR(STRYUAN,J-3,4) <> '0000'  
               THEN
                YUAN_RES :=DW(WS)||YUAN_RES;
             END IF;
          ELSE   
             IF SUBSTR(STRYUAN,J+1,1) <> '0'  
               THEN
                YUAN_RES :=UPPERDW(SZ)||YUAN_RES;
             END IF;
          END IF;
       END IF;
     END LOOP;
     IF YUAN_RES IS NOT NULL 
       THEN
        YUAN_RES:= YUAN_RES||'圆';
       END IF;
 ---处理小数
   FOR I IN 1..2
     LOOP
       SZ :=SUBSTR(STRFEN,LENGTH(STRFEN)-I+1,1);
       IF SZ <> '0'
         THEN
          FEN_RES := UPPERDW(SZ)||DW(I-3)||FEN_RES;
         END IF;
     END LOOP;
     IF FEN_RES IS NULL
       THEN 
         YUAN_RES:= YUAN_RES||'整';
     END IF;
     IF SUBSTR(STRFEN,LENGTH(STRFEN),1) = '0'
       THEN
         FEN_RES:=FEN_RES||'整';
     END IF;    
     STR_RES :=YUAN_RES || FEN_RES;
     IF STR_RES IS NULL 
       THEN
         STR_RES:= '零元整';
     END IF; 
   return STR_RES;
end fn_getupperrmb;

举报

相关推荐

0 条评论