Tenha em mente que você está transformando um número em uma string. O número não tem nenhum sentido de "," ou "." ou qualquer coisa - é um número.
O truque é obter o
TO_CHAR
função para converter o número interno para a representação de string que você deseja. Existem alguns problemas com os quais se preocupar:obter o ponto de base (decimal) correto e lidar com o preenchimento. Aqui está um exemplo de trabalho:
SELECT to_char(0.00235,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
0,00235
SELECT to_char(156.45823,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
156,45823
SELECT to_char(-0.0235,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
-0,0235
SELECT to_char(-156.45623,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
-156,45623
SELECT to_char(123456789.45623,'FM99999999999999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''') FROM DUAL;
123456789,45623
As partes relevantes da máscara:
FM
é usado para cortar espaços em branco à esquerda e à direita que o Oracle normalmente usa para preencher números. D
é o ponto de base, dependendo de suas configurações de NLS. NLS_NUMERIC_CHARACTERS ...
é uma substituição de suas configurações de NLS locais - isso pode não ser necessário se sua localidade usar uma vírgula para o decimal, mas é uma maneira de forçar esse comportamento em um banco de dados com, digamos, configurações norte-americanas.