加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Oracle 人民币小写转大写

发布时间:2021-01-10 05:55:14 所属栏目:MySql教程 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 CREATE OR REPLACE FUNCTION PARSE_FEE_CHINESE(N_FEE IN NUMBER) RETURN VARCHAR2 AS V_CHINESE_NUMBER VARCHAR2(30) := '零壹贰叁肆伍陆柒捌玖'; V_

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

CREATE OR REPLACE FUNCTION PARSE_FEE_CHINESE(N_FEE IN NUMBER)
  RETURN VARCHAR2 AS
  V_CHINESE_NUMBER VARCHAR2(30) := '零壹贰叁肆伍陆柒捌玖';
  V_CHINESE_POINT  VARCHAR2(30) := '分角元拾佰仟万亿';
  V_RESULT         VARCHAR2(100) := '';
  V_TEMP           VARCHAR2(100);
  V_FLAG           VARCHAR2(10);
  V_MAIN           VARCHAR2(40);
  V_SUB            VARCHAR2(20);
  N_TEMPFEE        NUMBER(30,2);
  C_CH1            CHAR(1);
  C_CH2            VARCHAR2(10);
  N_LENGTH         NUMBER(10) := 0;
  I                NUMBER(10) := 0;
  J                NUMBER(10) := 0;
  T                NUMBER(10) := 0;
BEGIN
  IF N_FEE < 0 THEN
    V_FLAG    := '负';
    N_TEMPFEE := -1 * N_FEE;
  ELSE
    N_TEMPFEE := N_FEE;
    V_FLAG    := '';
  END IF;
  SELECT TRIM(TO_CHAR(ROUND(N_TEMPFEE,2),'9999999999999999999.99'))
    INTO V_TEMP
    FROM DUAL;
  IF N_FEE = 0 THEN
    V_RESULT := '零元整';
  ELSE
    --先处理整数,再处理小数
    V_MAIN := SUBSTR(V_TEMP,1,INSTR(V_TEMP,'.') - 1);
    V_SUB  := SUBSTR(V_TEMP,'.') + 1);


    N_LENGTH := LENGTH(V_MAIN);
    I        := N_LENGTH;
    T        := 0;
    IF V_MAIN IS NULL OR '0' = V_MAIN THEN
      V_RESULT := '零' || V_RESULT;
    END IF;
    WHILE I > 0 LOOP
      I      := I - 1;
      T      := T + 1;
      C_CH1  := SUBSTR(V_MAIN,I + 1);
      V_MAIN := SUBSTR(V_MAIN,I);
      J      := TO_NUMBER(C_CH1);
      IF T = 5 OR t= 13 THEN
        V_RESULT := '万' || V_RESULT;
      ELSIF T = 9 THEN
        IF '万' = SUBSTR(V_RESULT,1) THEN
          V_RESULT := '亿' || SUBSTR(V_RESULT,2);
        ELSE
          V_RESULT := '亿' || V_RESULT;
        END IF;
      END IF;
      IF '0' = C_CH1 THEN
        IF I <> N_LENGTH AND '零' <> C_CH2 THEN
          IF T <> 5 AND T <> 9 AND T <> 13 THEN
            V_RESULT := '零' || V_RESULT;
          ELSIF T = 5 OR T = 9 OR t=13 THEN
            V_RESULT := SUBSTR(V_RESULT,1) || '零' ||
                        SUBSTR(V_RESULT,2);
          END IF;
          C_CH2 := SUBSTR(V_CHINESE_NUMBER,J,1);
        END IF;
      ELSE
        J := MOD(T,4);
        IF T <> 5 AND T <> 9 AND T <> 13 THEN
          IF J <> 1 THEN
            IF J = 0 THEN
              J := J + 4;
            END IF;
            J        := J + 2;
            V_RESULT := SUBSTR(V_CHINESE_POINT,1) || V_RESULT;
          END IF;
        END IF;
        J        := TO_NUMBER(C_CH1) + 1;
        C_CH2    := SUBSTR(V_CHINESE_NUMBER,1);
        V_RESULT := C_CH2 || V_RESULT;
      END IF;
    END LOOP;
    V_RESULT := V_RESULT || '元';
    IF V_SUB IS NULL OR LENGTH(TRIM(V_SUB)) <= 0 OR TO_NUMBER(V_SUB) = 0 THEN
      V_RESULT := V_RESULT || '整';
    ELSE
      C_CH1    := SUBSTR(V_SUB,1);
      J        := TO_NUMBER(C_CH1) + 1;
      C_CH2    := SUBSTR(V_CHINESE_NUMBER,1);
      IF '0' = C_CH1 THEN
              V_RESULT := V_RESULT || C_CH2 ;
      ELSE
      V_RESULT := V_RESULT || C_CH2 || '角';
      END IF;
      C_CH1 := SUBSTR(V_SUB,2,1);
      IF '0' <> C_CH1 THEN
        J        := TO_NUMBER(C_CH1) + 1;
        C_CH2    := SUBSTR(V_CHINESE_NUMBER,1);
        V_RESULT := V_RESULT || C_CH2 || '分';
      END IF;
    END IF;
  END IF;
  V_RESULT := V_FLAG || V_RESULT;
  RETURN V_RESULT;
END;

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读