Já tentei com as funções nativas,mas não funciona pois meu banco é latin1
alguém tem alguma solução?
Formata no front end.
preciso q senha via sql mesmo.
Logicamente o tipo do campo deverá ser decimal/numeric.
já vi esses exemplos, não funciona no banco latin 1
Recria e migra o banco pra utf8 ou entao vai ter que formatar na unha, substituindo ponto por vírgula e a cada milhar colocar ponto.
A função abaixo resolve seu problema…
---select FormataValor(2750,'.',',');
CREATE OR REPLACE FUNCTION FormataValor(p_Valor Decimal(18,2),p_SepMilhar char(1),p_SepDecimal Char(1))
/* SQLINES DEMO *** ect dbo.FormataValor (10000, '.', ',')
*/
Returns Varchar(50) AS $$
Declare v_Inteiro char(100);
v_Texto varchar(50);
v_ValorDecimal varchar(100);
Begin
v_Texto := RTrim(Cast(p_Valor as varchar(50)));
v_Inteiro := Cast(p_Valor as BIGINT);
v_ValorDecimal := SubString(v_Texto,length(v_Texto)-1,2);
If length(v_Inteiro) = 1 Then
v_Texto := (Cast(v_Inteiro as varchar(10))) || p_SepDecimal || v_ValorDecimal;
End if;
If length(v_Inteiro) = 2 Then
v_Texto := (Cast(v_Inteiro as varchar(10))) || p_SepDecimal || v_ValorDecimal;
End if;
If length(v_Inteiro) = 3 Then
v_Texto := (Cast(v_Inteiro as varchar(10))) || p_SepDecimal || v_ValorDecimal;
End if;
If length(v_Inteiro) = 4 Then
v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,1) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),2,3) || p_SepDecimal || v_ValorDecimal;
End if;
If length(v_Inteiro) = 5 Then
v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,2) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),3,3) || p_SepDecimal || v_ValorDecimal;
End if;
If length(v_Inteiro) = 6 Then
v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),4,3) || p_SepDecimal || v_ValorDecimal;
End if;
If length(v_Inteiro) = 7 Then
v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,1) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),2,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),5,3) || p_SepDecimal || v_ValorDecimal;
End if;
If length(v_Inteiro) = 8 Then
v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,2) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),3,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),6,3) || p_SepDecimal || v_ValorDecimal;
End if;
If length(v_Inteiro) = 9 Then
v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),4,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),7,3) || p_SepDecimal || v_ValorDecimal;
End if;
If length(v_Inteiro) = 10 Then
v_Texto := SubString(Cast(v_Inteiro as varchar(10)),1,1) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),2,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),5,3) || p_SepMilhar || SubString(Cast(v_Inteiro as varchar(10)),8,3) || p_SepDecimal || v_ValorDecimal;
End if;
Return v_Texto;
End;
$$ LANGUAGE plpgsql;
obrigado!!