Ir para conteúdo
    • João Batista Neto

      iMasters InterCon 2017   10-10-2017

      Ainda dá tempo de se inscrever no iMasters InterCon 2017, o maior evento dev do Brasil!  
jothaz

Formatar valores numéricos no SQL

Recommended Posts

A idéia é criar uma função de usuário para mascarar/formatar valores numéricos e monetários direto no SQL.

 

create  FUNCTION FormataValor(@Valor Decimal(18,4),@SepMilhar char(1),@SepDecimal Char(1))Returns  Varchar(50) ASBegin  Declare @Inteiro int,		  @Texto varchar(50),		  @ValorDecimal varchar(04)  Set @Texto = RTrim(Cast(@Valor as varchar(50)))  Set @Inteiro = Cast(@Valor as Integer)  Set @ValorDecimal = SubString(@Texto,Len(@Texto)-3,4)  If Len(@Inteiro) = 4	 Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,1) + @SepMilhar +  SubString(Cast(@Inteiro as varchar(10)),2,3) + @SepDecimal + @ValorDecimal  If Len(@Inteiro) = 5	 Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,2) + @SepMilhar +  SubString(Cast(@Inteiro as varchar(10)),2,3) + @SepDecimal + @ValorDecimal  If Len(@Inteiro) = 6	 Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,3) + @SepMilhar +  SubString(Cast(@Inteiro as varchar(10)),2,3) + @SepDecimal + @ValorDecimal  Return @TextoEnd
Para utlizá-la:

SELECT dbo.FormataValor(2560.69,'.',',')
OBS: sempre utilizar o . (ponto) como separador de decimal.

 

Espero que possa ser útil a alguém.

 

Fonte/Autor/link

AUTOR: Adaptei esta função de um post do forum imasters (do qual não tenho o link). Caso alguém seja o autor favor postar o link para que os créditos possam ser atribuido.

 

Dúvidas, criticas, contribuições, correções e adições serão bem vindas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. Tomei a liberdade de melhorar a function do colega acima e corrigir um erro pra valores com 6 casas.

Agora está funcionando perfeitamente, segundo meus testes.

 

Abraço

 

create FUNCTION FormataValor(@Valor Numeric(18,4),@SepMilhar char(1),@SepDecimal Char(1))

Returns Varchar(50) AS

Begin

Declare @Inteiro int,

@Texto varchar(50),

@ValorDecimal varchar(04)

 

Set @Texto = RTrim(Cast(@Valor as varchar(50)))

Set @Inteiro = Cast(@Valor as Integer)

Set @ValorDecimal = SubString(@Texto,Len(@Texto)-3,2)

 

If Len(@Inteiro) = 1

Set @Texto = Cast(@Inteiro as varchar(10)) + Replace(@SepMilhar, '.',',') + @ValorDecimal

 

If Len(@Inteiro) = 2

Set @Texto = Cast(@Inteiro as varchar(10)) + Replace(@SepMilhar, '.',',') + @ValorDecimal

 

If Len(@Inteiro) = 3

Set @Texto = Cast(@Inteiro as varchar(10)) + Replace(@SepMilhar, '.',',') + @ValorDecimal

 

If Len(@Inteiro) = 4

Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,1) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),2,3) + @SepDecimal + @ValorDecimal

 

If Len(@Inteiro) = 5

Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,2) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),3,5) + @SepDecimal + @ValorDecimal

 

If Len(@Inteiro) = 6

Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,3) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),4,7) + @SepDecimal + @ValorDecimal

 

If Len(@Inteiro) = 7

Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,1) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),2,3) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),5,7) + @SepDecimal + @ValorDecimal

 

Return @Texto

End

 

--para chamar a function

--SELECT dbo.FormataValor(1234567.99,'.',',')

Compartilhar este post


Link para o post
Compartilhar em outros sites

If Len(@Inteiro) = 8

Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,2) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),3,3) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),6,7) + @SepDecimal + @ValorDecimal

 

If Len(@Inteiro) = 9

Set @Texto = SubString(Cast(@Inteiro as varchar(10)),1,3) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),3,3) + @SepMilhar + SubString(Cast(@Inteiro as varchar(10)),7,7) + @SepDecimal + @ValorDecimal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora


×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.

Este projeto é mantido e patrocinado pelas empresas:
Hospedado por: