请教oracle过程实现金额转换

zhouxiaobin828 2011-02-18 09:48:08
需求是这样的。

金额以分为单位 。 比如 : 1000 指的是 10元。
我要将1000 转换为 十元

应考虑更为复杂的情况。。 比如 三百八十元七角四分

请指教
...全文
322 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2011-02-18
  • 打赏
  • 举报
回复
oracle中的translate函数可以解决此问题。
xman_78tom 2011-02-18
  • 打赏
  • 举报
回复
试试这个。如果有不准确的地方,请及时反馈。

declare
n number(14):=&n;
ni number(1);
bi number(2);
s varchar(30 char);
type num_typ is varray(10) of char(1 char);
num num_typ:=num_typ(null,'一','二','三','四','五','六','七','八','九');
type bit_typ is varray(14) of char(1 char);
bit bit_typ:=bit_typ('分','角','元','十','百','千','万','十','百','千','亿','十','百','千');
begin
bi:=1;
loop
ni:=mod(n,10);
s:=num(ni+1)||(case when num(ni+1) is not null then bit(bi)
when bit(bi)='元' then '元'
when bit(bi)='万' then '万'
when bit(bi)='亿' then '亿' end)||s;
bi:=bi+1;
n:=floor(n/10);
exit when n=0;
end loop;
-- dbms_output.put_line(s);
s:=regexp_replace(s,'(亿)([一|二|三|四|五|六|七|八|九][万|百|十|元])','\1零\2');
s:=regexp_replace(s,'(万)([一|二|三|四|五|六|七|八|九][百|十|元])','\1零\2');
s:=regexp_replace(s,'(千)([一|二|三|四|五|六|七|八|九][十|元|万|亿])','\1零\2');
s:=regexp_replace(s,'(百)([一|二|三|四|五|六|七|八|九][元|万|亿])','\1零\2');
s:=regexp_replace(s,'^一十','十');
dbms_output.put_line(s);
end;
/

dawugui 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhouxiaobin828 的回复:]
需求是这样的。

金额以分为单位 。 比如 : 1000 指的是 10元。
我要将1000 转换为 十元

应考虑更为复杂的情况。。 比如 三百八十元七角四分

请指教
[/Quote]
不懂,帮顶,学习,蹭分.


最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
如果有多表,表之间如何关联?


发帖注意事项
http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281


不过这个需求怕是很难实现,我有个sql server的,你参考一下:
CREATE FUNCTION dbo.L2U(@n_LowerMoney numeric(15,2),@v_TransType int) 
RETURNS VARCHAR(200) AS
BEGIN
Declare @v_LowerStr VARCHAR(200) -- 小写金额
Declare @v_UpperPart VARCHAR(200)
Declare @v_UpperStr VARCHAR(200) -- 大写金额
Declare @i_I int

set @v_LowerStr = LTRIM(RTRIM(ROUND(@n_LowerMoney,2))) --四舍五入为指定的精度并删除数据左右空格
set @i_I = 1
set @v_UpperStr = ''

while ( @i_I <= len(@v_LowerStr))
begin
select @v_UpperPart = case substring(@v_LowerStr,len(@v_LowerStr) - @i_I + 1,1)
WHEN '.' THEN '元'
WHEN '0' THEN '零'
WHEN '1' THEN '壹'
WHEN '2' THEN '贰'
WHEN '3' THEN '叁'
WHEN '4' THEN '肆'
WHEN '5' THEN '伍'
WHEN '6' THEN '陆'
WHEN '7' THEN '柒'
WHEN '8' THEN '捌'
WHEN '9' THEN '玖'
END
+
case @i_I
WHEN 1 THEN '分'
WHEN 2 THEN '角'
WHEN 3 THEN ''
WHEN 4 THEN ''
WHEN 5 THEN '拾'
WHEN 6 THEN '佰'
WHEN 7 THEN '仟'
WHEN 8 THEN '万'
WHEN 9 THEN '拾'
WHEN 10 THEN '佰'
WHEN 11 THEN '仟'
WHEN 12 THEN '亿'
WHEN 13 THEN '拾'
WHEN 14 THEN '佰'
WHEN 15 THEN '仟'
WHEN 16 THEN '万'
ELSE ''
END
set @v_UpperStr = @v_UpperPart + @v_UpperStr
set @i_I = @i_I + 1
end

if ( 0 = @v_TransType)
begin
set @v_UpperStr = REPLACE(@v_UpperStr,'零拾','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零佰','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零仟','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零零零','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零角零分','整')
set @v_UpperStr = REPLACE(@v_UpperStr,'零分','整')
set @v_UpperStr = REPLACE(@v_UpperStr,'零角','零')
set @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万零元','亿元')
set @v_UpperStr = REPLACE(@v_UpperStr,'亿零万零元','亿元')
set @v_UpperStr = REPLACE(@v_UpperStr,'零亿零万','亿')
set @v_UpperStr = REPLACE(@v_UpperStr,'零万零元','万元')
set @v_UpperStr = REPLACE(@v_UpperStr,'万零元','万元')
set @v_UpperStr = REPLACE(@v_UpperStr,'零亿','亿')
set @v_UpperStr = REPLACE(@v_UpperStr,'零万','万')
set @v_UpperStr = REPLACE(@v_UpperStr,'零元','元')
set @v_UpperStr = REPLACE(@v_UpperStr,'零零','零')
end

-- 对壹元以下的金额的处理
if ( '元' = substring(@v_UpperStr,1,1))
begin
set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if ( '零' = substring(@v_UpperStr,1,1))
begin
set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if ( '角' = substring(@v_UpperStr,1,1))
begin
set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if ( '分' = substring(@v_UpperStr,1,1))
begin
set @v_UpperStr = substring(@v_UpperStr,2,(len(@v_UpperStr) - 1))
end

if ('整' = substring(@v_UpperStr,1,1))
begin
set @v_UpperStr = '零元整'
end
return @v_UpperStr
END
GO

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧