1
resposta

[Sugestão] TO_CHAR - formato inglês

Verificando as explicações sobre a função TO_CHAR, percebi o seguinte detalhe, o qual sugiro uma revisão:

Nessa query (SELECT TO_CHAR(1234.123, '9999,999') FROM DUAL;), não temos o formato decimal de vírgula; mas sim, o formato de milhar com vírgula, onde a vírgula representa a separação do milhar. Por isso o número 1234.123, após aplicada a query, ficou sem as casas decimais e na parte inteira do número, foi incluída a vírugla (,), separando o milhar; resultando o número milhar no formato inglês (1,234), e sem o número decimal.

Se fosse aplicado (SELECT TO_CHAR(1234.123, '9999,999.999'), ficaria ( 1,234.123), ficando o número do milhar, com a vírugula (,) e o decimal, com ponto (.). E 3 espaços antes, já que transformando em um valor de texto, pelo formato teria 4 dígitos iniciais, nos dígitos correspondentes ao milhar da parte inteira do numero.

Se fosse colocado assim (SELECT TO_CHAR(7771234.123, '9999,999.999') FROM DUAL;), resultaria em ' 7771,234.123 e, (SELECT TO_CHAR(77771234.123, 'FM99999,999.999') FROM DUAL;) em '77771,234.123', retirando o espaço inicial devido ao parâmetro 'FM' e, (SELECT TO_CHAR(77771234.123, 'FM99,999,999.999') FROM DUAL;) em '77,771,234.123', com 2 vírgulas dos milhares e sem o espaço do dígito inicial.

Já assim (SELECT TO_CHAR(1234.123, '9999.999,999') FROM DUAL;), dá um erro; porque o número decimal não pode ter, após o seu terceiro dígito, uma vírgula que no caso representaria o milhar.

Isso tudo porque o oracle está configurado pro inglês.

1 resposta

Ei, Leandro! Tudo bem?

A sua sugestão de revisão é válida, pois ajuda a esclarecer como o Oracle lida com a formatação de números e pode evitar confusões para quem está aprendendo. Realmente, no formato no padrão inglês, pode alterar o retorno.

Continue se dedicando aos estudos e qualquer dúvida, compartilhe.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!