Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como formatar um número como moeda no Oracle


O Oracle Database fornece o TO_CHAR(number) função que permite formatar números com base em um determinado modelo de formato. Existem três elementos de formato que você pode usar com o TO_CHAR() função para retornar um valor como moeda.

Elementos de formato de moeda


Os elementos de formato de moeda são L , C e U .
C Retorna o símbolo de moeda ISO (o valor atual do NLS_ISO_CURRENCY parâmetro).
L Retorna o símbolo da moeda local (o valor atual de NLS_CURRENCY parâmetro).
U Retorna o símbolo de moeda dupla do Euro (ou outro), determinado pelo valor atual do NLS_DUAL_CURRENCY parâmetro.

Esses modelos de formato permitem que você exiba o símbolo de moeda com base nas configurações de moeda/região, em vez de fornecer um símbolo de moeda fixo.

Embora seja verdade que você pode fornecer um literal de string para a moeda (por exemplo, um cifrão ($ ) para dólares), isso pressupõe que a moeda seja denominada nesse valor codificado permanentemente. Existem muitas outras moedas possíveis em todo o mundo, e os elementos de formato são capazes de retornar dinamicamente o símbolo da moeda local para a sessão do usuário.

Exemplo


Segue um exemplo para demonstrar:
ALTER SESSION SET NLS_TERRITORY = 'Australia';
SELECT 
    TO_CHAR(12345, 'fmL99G999D00') AS "r1",
    TO_CHAR(12345, 'fmC99G999D00') AS "r3",
    TO_CHAR(12345, 'fmU99G999D00') AS "r3"
FROM DUAL;

Resultado:
           r1              r3            r3 
_____________ _______________ _____________ 
$12,345.00    AUD12,345.00    $12,345.00   

A única diferença entre essas três colunas é o elemento de formato de moeda. O primeiro usa L , o segundo usa C , e o terceiro usa U .

Todos eles usam o fm modificador de formato para suprimir qualquer preenchimento. Eles também usam o 9 e 0 elementos de formato para gerar os números (o 0 elemento inclui zeros à esquerda/à direita). Eles também incluem um separador de grupo (representado por G ), um caractere decimal (representado por D ).

Duas moedas


No exemplo acima, defino o NLS_TERRITORY para Australia . Isso resultou no mesmo símbolo de moeda sendo retornado em duas das três colunas (ou seja, o r1 e r3 colunas).

No exemplo a seguir, uso um território diferente:
ALTER SESSION SET NLS_TERRITORY = 'Denmark';
SELECT 
    TO_CHAR(12345, 'fmL99G999D00') AS "r1",
    TO_CHAR(12345, 'fmC99G999D00') AS "r3",
    TO_CHAR(12345, 'fmU99G999D00') AS "r3"
FROM DUAL;

Resultado:
            r1              r3            r3 
______________ _______________ _____________ 
kr12.345,00    DKK12.345,00    €12.345,00   

Desta vez, temos um símbolo de moeda diferente para cada um dos r1 e r3 colunas.

Consulte Como verificar os valores dos parâmetros NLS se precisar verificá-los.

O 'nlsparam' Argumento


Ao usar o TO_CHAR() função, a 'nlsparam' O argumento pode ser usado para especificar o caractere decimal e o separador de grupo, o símbolo de moeda local e o símbolo de moeda internacional.

Ele assume a seguinte forma:
'NLS_NUMERIC_CHARACTERS = ''dg''
   NLS_CURRENCY = ''text''
   NLS_ISO_CURRENCY = territory '

Exemplo:
SELECT 
    TO_CHAR(
        1234.56, 
        'fmL99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Resultado:
€1.234,56

Aqui está novamente, mas desta vez eu substituo L com C no modelo de formato:
SELECT 
    TO_CHAR(
        1234.56, 
        'fmC99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Resultado:
EUR1.234,56

O C retorna o símbolo de moeda ISO, que neste caso é EUR .

Veja esta Lista Completa de Elementos de Formato de Número no Oracle para obter uma lista de elementos de formato que podem ser usados ​​para formatar números com o TO_CHAR() função.