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

Conversão número para Moeda


fulvio

Pergunta

Pessoal,

Fiz uma função no SQL Server para converter um número para Moeda brasileira. Postei esta função no Fórum e decidi colocar aqui também.

Quem quiser implementar outras verificações / regras, fiquem a vontade!!! :.)

Funcionamento:

- Entrada de dados - números no formato XXX , XXX.X , XXX.XX , XXX.XXX

- Caso o número tenha mais de duas casas decimais: serão suprimidas.

- Formato de retorno: R$ XXX,XX

Script:

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 quiser utilzar convertendo uma coluna:
select dbo.ConverteMoedaReal (NomeColuna)  from TABELA where ....

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Opa, beleza Fulvio? Espero que sim.

Antes de mais nada, parabéns, muito bem bolada a função.

Agora vamos a pergunta:

Acha que seria possível e interessante usar um "round" para as casas decimais?

Eu até tentei entender uma forma de encaixa-lo ai, mas meu conhecimento limitado no momento me privou.

Abraços.

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...