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

Função TO_CHAR(número) no Oracle


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 tipo NUMBER , BINARY_FLOAT , ou BINARY_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


'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"