Oracle实现小写金额转换成大写的方法,代码如下:
CREATE OR REPLACE FUNCTION convert_money(n_LowerMoney IN NUMBER,
v_TransType IN NUMBER DEFAULT 1 -- 1: directly translate, 0: read it in words
) RETURN VARCHAR2 AS
v_LowerStr VARCHAR2(200); -- 小写金额
v_UpperPart VARCHAR2(200);
v_UpperStr VARCHAR2(200); -- 大写金额
BEGIN
v_LowerStr := LTRIM(RTRIM(TO_CHAR(ROUND(n_LowerMoney, 2),
9999999999999.99)));
IF SUBSTR(v_LowerStr, 1, 1) = # THEN
RETURN 转换金额超过计算范围(计算范围为 :计算范围为 :0 - 9,
999,
999,
999,
999.99);
END IF;
FOR I IN 1 .. LENGTH(v_LowerStr) LOOP
SELECT DECODE(SUBSTR(v_LowerStr,LENGTH(v_LowerStr) - I + 1,1),
.,元,0,零, 1,壹, 2,贰, 3,叁, 4,肆,
5,伍, 6,陆, 7,柒, 8,捌, 9,玖)||
DECODE(I,1,分,2,角,3,NULL,4,NULL,5,拾,6,佰,7,仟,8,万,
9,拾,10,佰,11,仟,12,亿,13,拾,14,佰,15,仟,16,万,NULL)
INTO v_UpperPart FROM DUAL;
v_UpperStr := v_UpperPart || v_UpperStr;
END LOOP;
IF v_TransType = 0 then
v_UpperStr := REPLACE(v_UpperStr, 零拾, 零);
v_UpperStr := REPLACE(v_UpperStr, 零佰, 零);
v_UpperStr := REPLACE(v_UpperStr, 零仟, 零);
v_UpperStr := REPLACE(v_UpperStr, 零零零, 零);
v_UpperStr := REPLACE(v_UpperStr, 零零, 零);
v_UpperStr := REPLACE(v_UpperStr, 零角零分, 整);
v_UpperStr := REPLACE(v_UpperStr, 零分, 整);
v_UpperStr := REPLACE(v_UpperStr, 零角, 零);
v_UpperStr := REPLACE(v_UpperStr, 零亿零万零元, 亿元);
v_UpperStr := REPLACE(v_UpperStr, 亿零万零元, 亿元);
v_UpperStr := REPLACE(v_UpperStr, 零亿零万, 亿);
v_UpperStr := REPLACE(v_UpperStr, 零万零元, 万元);
v_UpperStr := REPLACE(v_UpperStr, 万零元, 万元);
v_UpperStr := REPLACE(v_UpperStr, 零亿, 亿);
v_UpperStr := REPLACE(v_UpperStr, 零万, 万);
v_UpperStr := REPLACE(v_UpperStr, 零元, 元);
v_UpperStr := REPLACE(v_UpperStr, 零零, 零);
END IF;
-- 对壹元以下的金额的处理
v_UpperStr := LTRIM(LTRIM(LTRIM(LTRIM(v_UpperStr, 元), 零), 角), 分);
IF SUBSTR(v_UpperStr, 1, 1) = 整 THEN
v_UpperStr := 零元整;
END IF;
RETURN v_UpperStr;
EXCEPTION
WHEN OTHERS THEN
RETURN 发生错误 :|| SQLCODE || --||SQLERRM;
END convert_money;