2016-07-14 24 views
-2

美好的一天请有人可以帮助我货币格式的###,###,###。##我所尝试的一切我似乎陷入了困境 - 我的代码如下:协助货币格式

function CF_TOTAL_COSTFormula return Number is total_cost number; begin select SUM(share_amount) into total_cost from reservation_name rn, reservation_daily_element_name rden where rn.resv_name_id = rden.resv_name_id and rn.resv_name_id = :resv_name_id and trunc(rden.reservation_date) between trunc(rn.begin_date) and trunc(rn.end_date - 1); return total_cost; exception when others then return 0; end;

+0

上面的代码踢出了一个数字,如1234,我希望它是格式1,234.00 – DSmith

回答

1

您的函数返回NUMBER。 Oracle中的数字没有格式。如果你想返回一个格式化的数字,你需要返回一个VARCHAR2。事情是这样的:

function CF_TOTAL_COSTFormula return varchar2 is 
total_cost varchar2(30); 
begin 
    select to_char(SUM(share_amount),'999,999,990.00') into total_cost 
    from reservation_name rn, 
     reservation_daily_element_name rden 
    where rn.resv_name_id = rden.resv_name_id 
    and rn.resv_name_id = :resv_name_id 
    and trunc(rden.reservation_date) between trunc(rn.begin_date) and trunc(rn.end_date - 1); 
    return total_cost; 
exception when others then 
    return 'error'; 
end; 

顺便说一句,我收集来自也许你正在使用Oracle报告或Oracle BI Publisher中的函数的名称。如果是这样,您应该继续返回一个数字并处理布局中的显示格式,而不是模型。

+0

这已经像一个魅力,我已经应用到多个领域,我正在努力与它是完美的!我正在使用Oracle Reports,它们是100%正确的,但是我使用它们很难在前端自定义格式,因为它会影响其他布局。再一次非常感谢你!!! – DSmith

+0

我还有一个问题,也许你可以建议,我有一个目前正在吐出4位小数的计算,但我想四舍五入到最接近的2位小数,我试过使用ROUND((ret_val),2),但它四舍五入到最近的兰特无论我是否增加2甚至6,任何想法? – DSmith

+0

我不确定什么是“舍入到最近的rand”的意思。但是,'ROUND(x,2)'将'x'舍入到小数点后两位。请记住,再次,数字没有格式。所以,“round(3.4976)”将是3.5,而不是“3.50”。 –