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.