视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle人民币小写转大写
2020-11-09 16:12:13 责编:小采
文档


练手用用,写得很复杂 无 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) :=

练手用用,写得很复杂 <无> $velocityCount-->
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, INSTR(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, 1, 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, 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, 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, J, 1) || V_RESULT;
 END IF;
 END IF;
 J := TO_NUMBER(C_CH1) + 1;
 C_CH2 := SUBSTR(V_CHINESE_NUMBER, J, 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, 1);
 J := TO_NUMBER(C_CH1) + 1;
 C_CH2 := SUBSTR(V_CHINESE_NUMBER, J, 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, J, 1);
 V_RESULT := V_RESULT || C_CH2 || '分';
 END IF;
 END IF;
 END IF;
 V_RESULT := V_FLAG || V_RESULT;
 RETURN V_RESULT;
END;

下载本文
显示全文
专题