Ir para conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

    0 membros, 0 visitantes, 0 membros anônimos

Foto
- - - - -

Formatar valores numéricos no SQL

  • Por favor, faça o login para responder
2 respostas neste tópico

#1 jothaz

jothaz

    .: Ninguém falou que seria fácil!:.

  • Members
  • 1.163 posts

Postado 10 abril 2007 - 19:25

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

Publicidade

#2 rubensbiork

rubensbiork
  • Members
  • 1 posts

Postado 01 setembro 2008 - 09:43

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,'.',',')
  • 0

#3 Fábio José Borges

Fábio José Borges
  • Members
  • 1 posts

Postado 17 junho 2009 - 16:24

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




Publicidade

/ins>