No Oracle Database, o
TO_CHAR(number)
função converte um número em um VARCHAR2
valor no formato especificado pelo argumento de formato. Sintaxe
A sintaxe fica assim:
TO_CHAR(n [, fmt [, 'nlsparam' ] ])
Onde:
n
pode ser do tipoNUMBER
,BINARY_FLOAT
, ouBINARY_DOUBLE
.fmt
é um modelo de formato opcional que especifica como o resultado deve ser formatado. Veja os elementos de formato numérico válidos que podem ser usados para construir seu modelo de formato.'nlsparam'
é um argumento opcional que especifica como vários caracteres são retornados. Você pode usá-lo para especificar o caractere decimal e o separador de grupo, o símbolo de moeda local e o símbolo de moeda internacional. Se este argumento for omitido, os valores padrão da sessão atual serão usados.
Exemplo
Aqui está um exemplo para demonstrar como a função funciona:
SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;
Resultado:
RESULT __________ 12,345
O primeiro argumento é o número real que estamos formatando e o segundo argumento é o modelo de formato. O modelo de formato especifica como o número é formatado.
Nesse caso, nosso modelo de formato formata o número com um separador de grupo na posição apropriada. Cada dígito numérico é representado por
9
, e o separador de grupo é representado por G
. Aqui está o que acontece se mudarmos um pouco o modelo de formato:
SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;
Resultado:
RESULT ___________ 012,345
Nesse caso, iniciamos o modelo de formato com um
0
personagem. Isso retorna um zero à esquerda sempre que aplicável. O 9
caractere não retorna zeros à esquerda. Na verdade, poderíamos substituir todos os
9
s com 0
s se quisermos. Aqui está uma comparação que mostra como os resultados podem diferir consideravelmente, dependendo de qual elemento de formato você usa:SELECT
TO_CHAR(12, '000G000') AS "000G000",
TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;
Resultado:
000G000 999G999 ___________ ___________ 000,012 12
Símbolos de moeda
Você pode usar o
L
elemento de formato para retornar o símbolo da moeda local. Exemplo:
SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;
Resultado:
RESULT _______________________ $12,345.00
Este exemplo usa um modelo de formato que gera o resultado usando o símbolo da moeda local (representado por
L
), um separador de grupo (representado por G
), um caractere decimal (representado por D
) e, claro, cada dígito numérico (representado por 9
). O símbolo da moeda local é determinado pelo valor atual de
NLS_CURRENCY
parâmetro. É verdade que poderíamos ter usado um cifrão ($
) para o símbolo da moeda, mas isso pressupõe que a moeda seja denominada em dólares. Existem muitas outras moedas possíveis em todo o mundo, e o L
O elemento de formato é capaz de retornar dinamicamente o símbolo da moeda local para a sessão do usuário. Consulte Como verificar os valores dos parâmetros NLS se precisar verificá-los.
Consulte 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 esta função.
Formato padrão
Se você omitir o
fmt
argumento, o número é convertido em um VARCHAR2
valor exatamente o suficiente para manter seus dígitos significativos. Aqui está um exemplo de conversão de um número sem especificar o formato:
SELECT TO_CHAR(525.45)
FROM DUAL;
Resultado:
525.45
O 'nlsparam'
Argumento
O
'nlsparam'
O argumento pode ser usado para especificar o caractere decimal e o separador de grupo, o símbolo da moeda local e o símbolo da moeda internacional. Ele assume a seguinte forma:
'NLS_NUMERIC_CHARACTERS = ''dg''
NLS_CURRENCY = ''text''
NLS_ISO_CURRENCY = territory '
Exemplo:
SELECT
TO_CHAR(
1234.56,
'L99G999D99',
'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,
'C99G999D99',
'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
. Como suprimir o preenchimento
Você deve ter notado que alguns dos exemplos têm preenchimento aplicado à esquerda dos resultados. Esse preenchimento pode ser removido com o
fm
modificador de formato. Exemplo:
SELECT
TO_CHAR(
1234.56,
'fmL99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''€''
NLS_ISO_CURRENCY = Germany'
)
FROM DUAL;
Resultado:
€1.234,56
Argumentos nulos
Passando
null
resulta em null
:SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Resultado:
null
Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que
null
ocorre como resultado de um SQL SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null
deve ser devolvido. Argumento ausente
Chamar a função sem passar nenhum argumento resulta em um erro:
SELECT TO_CHAR()
FROM DUAL;
Resultado:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
Passar muitos argumentos também resulta em um erro:
SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;
Resultado:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"