自己写一个函数来处理,下面给个例子,声明:此例来源于网上,此处只是转帖.供网友研究学习参考用.CREATE OR REPLACE FUNCTION CONVERT_MONEY (v_number number) RETURN varchar2 is/*********************************************************************************/ /* 此函数处理数字小写金额转换为大写金额 */ /* 函数名:CONVERT_MONEY */ /* 参 数:v_number 类型:number */ /* 数字金额不能超过万亿,否则返回溢出 */ /* 注意:存放大写单位的字符串中的空格为两个字符 */ /* */ /*********************************************************************************/var_unit varchar2(30):='分角 元拾佰仟万拾佰仟亿拾佰仟'; --大写单位 var_chn varchar2(20):='壹贰叁肆伍陆柒捌玖零'; --数字大写 var_bool char(1) :='F'; --零位置标记 var_i number(2) :=0; --计数器(存放每个字符位置) var_out varchar2(100); --返回参数(返回转换过后的大写金额) var_number varchar2(30); --数字字符串 var_length number(2); --字符串长度 var_temp char(1); --单个字符BEGIN IF ABS(v_number)>999999999999.99 THEN --万亿不预考虑 var_out := '溢出!'; RETURN var_out; END IF; IF ABS(v_number)=0 THEN --0处理 var_out:='零元整'; RETURN var_out; END IF; var_number:=RTRIM(LTRIM(TO_CHAR(v_number,'999999999990.99'))); --格式转换 var_length:=LENGTH(var_number); --获取长度 IF substr(var_number,var_length,1)='0' THEN var_out:='整'; --整元整角处理 END IF; var_temp:=SUBSTR(var_number,var_length,1);
WHILE (var_temp is not null) or( var_temp='') LOOP --循环开始(从右到左逐为转换) var_i:=var_i+1; var_length:=LENGTH(var_number); var_temp:= SUBSTR(var_number,var_length,1 ); var_number:=SUBSTR(var_number,1,var_length-1); IF var_temp is null or var_temp='' THEN --右取值为空,退出循环 Exit; END IF; IF var_temp = '.' THEN GOTO next_loop ; --为小数点时,跳过 END IF; IF var_temp = '-' THEN var_out:= '负'||var_out; --为’-‘时,退出循环 EXIT ; END IF; IF var_temp <> '0' THEN --数字不为零时 var_out:=SUBSTR(var_chn,2*TO_NUMBER(var_temp)-1,2)||SUBSTR(var_unit,2*var_i-1,2)||var_out; var_bool:='T'; Else --数字为零时 IF var_bool='T' THEN IF (var_i <> 4 and var_i <> 2) or TO_NUMBER(var_number) <> 0 THEN var_out:='零'||var_out; END IF; var_bool:='F'; END IF; IF var_i= 12 or var_i = 8 THEN IF SUBSTR(var_number,LENGTH(var_number)-2, 3) <> '000' THEN var_out:= SUBSTR(var_unit,2*var_i-1,2)||var_out; END IF ; END IF; IF var_i = 4 THEN IF TO_NUMBER(var_number) <> 0 THEN var_out:=SUBSTR(var_unit,2*var_i-1,2)||var_out; end if; END IF; END IF; <<next_loop >> BEGIN null; END; END LOOP; var_out:='¥'||var_out; RETURN var_out; EXCEPTION WHEN OTHERS THEN var_out :=sqlerrm; END CONVERT_MONEY; /
(v_number number) RETURN varchar2 is/*********************************************************************************/
/* 此函数处理数字小写金额转换为大写金额 */
/* 函数名:CONVERT_MONEY */
/* 参 数:v_number 类型:number */
/* 数字金额不能超过万亿,否则返回溢出 */
/* 注意:存放大写单位的字符串中的空格为两个字符 */
/* */
/*********************************************************************************/var_unit varchar2(30):='分角 元拾佰仟万拾佰仟亿拾佰仟'; --大写单位
var_chn varchar2(20):='壹贰叁肆伍陆柒捌玖零'; --数字大写
var_bool char(1) :='F'; --零位置标记
var_i number(2) :=0; --计数器(存放每个字符位置)
var_out varchar2(100); --返回参数(返回转换过后的大写金额)
var_number varchar2(30); --数字字符串
var_length number(2); --字符串长度
var_temp char(1); --单个字符BEGIN
IF ABS(v_number)>999999999999.99 THEN --万亿不预考虑
var_out := '溢出!';
RETURN var_out;
END IF;
IF ABS(v_number)=0 THEN --0处理
var_out:='零元整';
RETURN var_out;
END IF;
var_number:=RTRIM(LTRIM(TO_CHAR(v_number,'999999999990.99'))); --格式转换
var_length:=LENGTH(var_number); --获取长度
IF substr(var_number,var_length,1)='0' THEN
var_out:='整'; --整元整角处理
END IF;
var_temp:=SUBSTR(var_number,var_length,1);
WHILE (var_temp is not null) or( var_temp='') LOOP --循环开始(从右到左逐为转换)
var_i:=var_i+1;
var_length:=LENGTH(var_number);
var_temp:= SUBSTR(var_number,var_length,1 );
var_number:=SUBSTR(var_number,1,var_length-1);
IF var_temp is null or var_temp='' THEN --右取值为空,退出循环
Exit;
END IF;
IF var_temp = '.' THEN
GOTO next_loop ; --为小数点时,跳过
END IF;
IF var_temp = '-' THEN
var_out:= '负'||var_out; --为’-‘时,退出循环
EXIT ;
END IF;
IF var_temp <> '0' THEN --数字不为零时
var_out:=SUBSTR(var_chn,2*TO_NUMBER(var_temp)-1,2)||SUBSTR(var_unit,2*var_i-1,2)||var_out;
var_bool:='T';
Else --数字为零时
IF var_bool='T' THEN
IF (var_i <> 4 and var_i <> 2) or TO_NUMBER(var_number) <> 0 THEN
var_out:='零'||var_out;
END IF;
var_bool:='F';
END IF;
IF var_i= 12 or var_i = 8 THEN
IF SUBSTR(var_number,LENGTH(var_number)-2, 3) <> '000' THEN
var_out:= SUBSTR(var_unit,2*var_i-1,2)||var_out;
END IF ;
END IF;
IF var_i = 4 THEN
IF TO_NUMBER(var_number) <> 0 THEN
var_out:=SUBSTR(var_unit,2*var_i-1,2)||var_out;
end if;
END IF;
END IF;
<<next_loop >>
BEGIN
null;
END;
END LOOP;
var_out:='¥'||var_out;
RETURN var_out;
EXCEPTION
WHEN OTHERS THEN
var_out :=sqlerrm;
END CONVERT_MONEY;
/