Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
fulvio

Conversão número para Moeda

Question

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: [email protected]
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 ....

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  



  • Forum Statistics

    • Total Topics
      148386
    • Total Posts
      643773
×
×
  • Create New...