【问题标题】:Oracle SQL - change decimal dot for a commaOracle SQL - 更改逗号的小数点
【发布时间】:2012-10-10 02:29:33
【问题描述】:

我在巴西,我们的货币格式类似于“R$ 9.999,00”。

我正在尝试选择一个字段,并更改返回的格式。不过,我好像做不到。我试过了:

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';

SELECT to_char(10,'9,999.00', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL

这些都不起作用。不确定它是否可能是我的客户(我在 Ubuntu 上使用 sqldeveloper),或者我做错了什么。

有什么想法吗?

【问题讨论】:

    标签: oracle currency comma


    【解决方案1】:

    使用

    SELECT to_char(10,'9G990D00', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL
    

    G 是千位分隔符的符号 D 是小数分隔符

    【讨论】:

    • :如果数字增加到8位,那么这将如何满足?
    【解决方案2】:

    我认为你的格式掩码有误。请试试这个格式掩码:

    SELECT to_char(10000,'99G990D00', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL
    

    确保您将在格式掩码中使用正确数量的前导“9”以获得更大的数字

    【讨论】:

    • 即使结果为零也有效。这是正确的答案。
    【解决方案3】:

    我通过以下方式解决了这个问题:

    SELECT TO_CHAR(1000000000,'999G999G999G999D99','NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
    

    以十亿为单位格式化数字。我认为它有帮助。

    【讨论】:

      【解决方案4】:
      CREATE OR REPLACE FUNCTION APPS.EX_number_format( ff number) RETURN char IS
      
      xx varchar2(100);
      yy varchar2(1);
      tt varchar2(100);
      x number:=0;
      begin
      xx:=to_char(ff,'99G990G990G990G990G990D00');
      for i  in 1..length(xx) loop
      yy:=substr(xx,i,1);
      if yy in ('1','2','3','4','5','6','7','8','9') then
      x:=i;
      exit;
      end if;
      end loop;
      
      tt:=substr(xx,x,length(xx));
      return tt;
      
      END EX_number_format;
      

      从对偶中选择 EX_number_format(1000);

      1,000.00

      从对偶中选择 EX_number_format(1859684500);

      1,859,684,500.00

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多