• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

使用TO_CHAR在Oracle中进行数字格式化

sql 来源:PAVITRA 3次浏览

在ORACLE存储过程中格式化数字的正确方法。使用TO_CHAR在Oracle中进行数字格式化

我需要显示2位小数的货币字段。 预期输出如下:

  • 0> 0.00
  • 5> 5.00
  • 1253.6> 1253.60
  • 1253.689> 1253.69

下面为我工作:

select to_char(9876.23 , 'fm999990.00') from dual; 

但这有硬c的问题编了一堆9。如果我给一个更大的数字,它会显示为“##############”

有没有其他方法可以做到这一点?


===========解决方案如下:

我需要2位小数,显示货币字段。

确保您使用具有适合数据的比例和精度的数字数据类型,而不使用NUMBER而没有比例和精度。如果你打算存储美元/欧元/磅/等。那么Gross World Product是的$ 100,000,000,000,000在2014年的订单让我们假设你是不是将要处理超过此[来源请求]那么你的货币列可以是:

NUMBER(17,2) 

如果你得到一个价值大于此值,那么您需要对您的数据执行完整性检查,并考虑一个比世界总产品更大的数额是否合理。如果您要将这些值存储为例如日元或津巴布韦元,请适当调整比例。

你甚至可以在一个包中定义一个子类:

CREATE PACKAGE currencies_pkg IS 
    SUBTYPE currency_type IS NUMBER(17,2); 

    FUNCTION formatCurrency(
    amount IN CURRENCY_TYPE 
) RETURN VARCHAR2; 
END; 
/

您的代码格式化,可以这样:

CREATE PACKAGE BODY currencies_pkg IS 
    FUNCTION formatCurrency(
    amount IN CURRENCY_TYPE 
) RETURN VARCHAR2 
    IS 
    BEGIN 
    RETURN TO_CHAR(currency_value, 'FM999999999999990D00'); 
    END; 
END; 
/

然后,如果你引用的子类型的存储过程/包,您将无法超过货币数据类型的最大大小,而不会引发异常。显示值的格式模型只需要在一个地方定义,并且由于输入限于货币子类型,所以格式化函数将永远不会超过强加的比例/精度,并且不能输出#

CREATE PROCEDURE your_procedure(
    in_value1 IN ACCOUNTS_TABLE.ACCOUNT_BALANCE%TYPE, 
    in_value2 IN ACCOUNTS_TABLE.ACCOUNT_BALANCE%TYPE 
) 
IS 
    v_value CURRENCIES_PKG.CURRENCY_TYPE; 
BEGIN 
    -- Do something 
    v_value := in_value1 + in_value2; 
    -- Output formatted value 
    DBMS_OUTPUT.PUT_LINE(CURRENCIES_PKG.formatCurrency(v_value)); 
END; 
/

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)