Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Monetary Data - Real


Thiago A. Colebrusco

Pergunta

Bom dia galera,

Sou novo no fórum e estou com um problema para converter para o dinheiro brasileiro (R$).

Preciso fazer um select que retorne o valor justamente como ele é no R$ (por exemplo: R$ 5.120.362,20)

Trocar ponto por virgula é fácil. Só usar um replace.

Mas pra colocar o ponto a cada três digitos está difícil.

Alguém poderia me ajudar? Estou usando SQL Server 2005.

Att,

Thiago A. Colebrusco

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Thiago,

O Sql Server não possui nenhuma função para realizar esta formatação.

Sendo assim, criei uma função para esta conversão.

Como funciona:

- você terá que passar o número para a função no formato: XXX ou XXX.X ou XXX.XX (número inteiro, com 1 ou 2 casas depois do ponto).

- Se você colocar mais de 2 casas após o ponto, será suprimida as demais casas, deixando apenas 2.

Vou aproveitar e colocar o script na parte de Tutoriais & Dicas - SQL Server :.)

Segue o script para criação da função:

create function ConverteMoedaReal (@Numero varchar(40)) Returns Varchar(40)  
-- Implementado por Fulvio Duarte
-- MSN: daasabh@hotmail.com
as
Begin
Declare @Contador int
Declare @Pontos int
Declare @CasasVirgula int
Declare @Parte1 varchar(40)
Declare @Parte2 varchar(40)

set @CasasVirgula = (len(substring (@Numero, charindex('.', @Numero)+1, len (@Numero))))

if @CasasVirgula > 2
  Set @Numero = (substring (@Numero, 1, (charindex('.', @Numero)) + 2) )

If charindex('.', @Numero) <> 0
Begin
  set @Numero = replace(@Numero, '.', ',')
  If len(substring(@Numero, charindex(',', @Numero)+1, 2)) = 1
    Set @Numero = @Numero + '0'
End
Else
  Set @Numero = @Numero + ',00'

Set @Contador = (charindex(',', @Numero)-1)
Set @Pontos = @Contador/3

While @Pontos <> 0
Begin
  Set @Contador = @Contador-3
  Set @Parte2 = (substring (@Numero, @Contador+1, len(@Numero)))
  Set @Parte1 = (substring (@Numero, 1, (charindex(@Parte2, @Numero)-1)))
  Set @Numero = @Parte1 + '.' + @Parte2
  Set @Pontos = @Pontos - 1
End

if (substring (@Numero, 1,1)) = '.'
 Set @Numero = (substring (@Numero, 2,len(@Numero)))

Set @Numero = 'R$ ' + @Numero

return @Numero
end
Para chamar a função:
select dbo.ConverteMoedaReal ('5120362.20')
Se você quiser utilzar, convertendo uma coluna:
select dbo.ConverteMoedaReal (NomeColuna)  from TABELA where ....

Testa aí e vê se funciona.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde!

Muito obrigado, deu certinho. Deu um probleminha quando eu uso alguns formatos (como por exemplo, o número "12345" retorna apenas "R$ 12,00" ou o número "123." que retorna "R$ 123,").

Pra corrigir isso, bastou usar a função com um convert para money:

select dbo.ConverteMoedaReal (convert(money,'23213'))

Muito obrigado mesmo.

Att,

Thiago A. Colebrusco

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...